Interprétation d'un /* et */ par un bash

Bonjour,
J'aurais un petit problème avec la programmation bash.
En fait, je développe un script qui traite des fichiers .c .cpp ... et pour chacun d'eux il liste (dans un log) les lignes qui ont plus de 100 caractères et les édite tronqués au 100ème caractère.
Le problème est que dans certains fichiers , les commentaire sont de cette forme /* */
J'ai l'impression que le shell interprète /* comme un: ls -d /*
et du coup lors que la ligne est tronquée, j'ai ceci :
ligne 3: /bin /cygwin.bat /cygwin.ico /etc /home /lib /tmp /usr /var this ALWAYS GENERATE ...
Alors que cette ligne est en réalité :
ligne 3: /* this ALWAYS GENERATE ...
Comment est ce que je pourrais faire pourque le shell accepte /* et */ sans les interprèter ..
Je vous remercie à l'avance pour votre aide précieuse.
Configuration: Windows XP
Internet Explorer 7.0

9 réponses

  1. Modérateur
    Tiens tu peux essayer ça :
    #set -xv
    
    #$1:le fichier concerné
    sed 's|\*|\\\*|g' < "$1" | while read ligne
    do
    i=$(expr $i + 1)
    #Nombres de caractères de la ligne courante ET suppression des vides
    Nombre_Caracteres=`echo "$ligne" | wc -c | tr -d ' '`
    test="$Nombre_Caracteres"
    if [ "$test" -gt 100 ]
    then
    #On récupère la ligne correspondante tronquée au 100ème caractères.
    ligneTronquee=`echo "$ligne" | cut -c1-100`
    message=`echo -e "ligne $i: $ligneTronquee ... "`
    echo "$message" >> Log
    fi
    done
    1. voici un bout de code :

      /* Détermine si un visuel peut rester ouvert à l'apparition d'un nouveau visuel*/
      virtual bool PeutResterOuverte(int id_nouveau_visuel);
      /* Précise les éléments de disposition des visuels*/
      /* debut Test de la CB */
      void CCB::RemplirListeCB(char *pTypPr);
      void CCB::RemplirListeFact(void);
      /* void ChargeListeFacturationModA(long pNoPrPCM, char * pTyPr);*/ /* GGRZ */
      long ChargeListeFacturationModP(long pNoPrPCM, char * pTyPr);
      void CCarteBleue::SetFlecheTri(void);
      void CCarteBleue::BasculeModA(void);
      /* debut Test de la CB */
      1. Modérateur
        Je crois que ça dépend aussi de la version de bash et des options activées/désactivées de celui-ci (je pense à shopt et ses *glob") ;-\

        On peut avoir un bout d'un de tes fichiers histoire de tester ?
        1. Contributeur
          ne pas oublier celle ci
          Nombre_Caracteres=`echo $ligne | wc -c | tr -d ' '`
          1. merci pour la réponse,
            En fait, j'ai essayé ligneTronquee=`echo "$ligne" | cut -c1-100` mais ça fonctionne dans certains cas et ne fonctionne pas dans d'autres cas (J'ai encore cette interprétation du /*)
            De plus , j'ai l'impression qu'il interpréte les * dans certaines séquences du genre "char * pTyPr" par exemple. par "01ReBuildAllUnmanaged.vbs 02ReBuildAllTech.vbs 03ReBuildAllBeans.vbs 04ReBuildConversion.vbs 05ReBuildAllAppliCaprice.vbs 06ReBuildAllAppliJazz.vbs...." ...
            Et même les ' ' ne fonctionnent pas.
            1. Contributeur
              hello
              mettre des " pour que le shell n'interprète pas * contenu dans ligne
              ligneTronquee=`echo "$ligne" | cut -c1-100`
              1. Modérateur
                Salut,

                tu peux utiliser les apostrophes simples ou mettre un backslash avant les caractères
                encore mieux sera de nous montrer ton script ou la partie concernée ;-)
                1. Salut,
                  Je vous remercie pour vos réponses.
                  Voici la partie du script concerné:

                  #$1:le fichier concerné
                  cat $1 | while read ligne
                  do
                  i=$(expr $i + 1)
                  #Nombres de caractères de la ligne courante ET suppression des vides
                  Nombre_Caracteres=`echo $ligne | wc -c | tr -d ' '`
                  test=$Nombre_Caracteres
                  if [ "$test" -gt 100 ]
                  then
                  #On récupère la ligne correspondante tronquée au 100ème caractères.
                  ligneTronquee=`echo $ligne | cut -c1-100`
                  message=`echo -e "ligne $i: $ligneTronquee ... "`
                  echo $message >> $Log
                  fi
                  done

                  Merci d'avance.
              2. Modérateur
                Salut,

                A quel niveau le caractère est interprété, commande ? variable ?