Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/11/2011, à 11:51

hudsonhawk3

Comparaison de deux chaines

Bonjour,
Je suis nouveau en bash et je souhaiterai ecrire un programme pour comparer deux chaines de caractères seulement je n'y arrive pas.

en fait c'est tout simple, j'ouvre un fichier texte que je lis ligne par ligne et je veux comparer les lignes avec une variable texte

while read line  
do   
   if  [ "$line" = "1" ]
   then
   echo "ok"
   fi
done < file.txt

Si je déclare deux variables dans le code et que je les compare ça marche donc je pense que ça viens du fichier texte.
il ne passe jamais dans le if
c'est un fichier windows et apparemment les fin de lignes sont différentes.
est-ce que ça peux venir de là?

j'ai cherche sur un bon nombre de forum sans vraiment trouver ou peut être sans comprendre vraiment la solution.

merci beaucoup

Hors ligne

#2 Le 24/11/2011, à 12:13

pingouinux

Re : Comparaison de deux chaines

Bonjour,
S'il sagit de virer le caractère '\r' à le fin de la ligne, il faut juste remplacer le test par :

   if  [ "${line%$'\r'}" = "1" ]

Ajouté :
Pour transformer le fichier d'entrée d'abord :

sed 's/\r$//' file.txt >file_unix.txt

ou, pour modifier le fichier directement :

sed -i 's/\r$//' file.txt

Remarque :
Les espaces ou tabulations situés en début ou fin de ligne ne sont pas pris en compte dans la comparaison. Par exemple, le test sera vrai avec chacune de ces lignes :

1
                       1

Dernière modification par pingouinux (Le 24/11/2011, à 12:30)

Hors ligne

#3 Le 24/11/2011, à 14:06

hudsonhawk3

Re : Comparaison de deux chaines

merci beaucoup, ça fait 2 jour que je cherche. tongue:P

Hors ligne

#4 Le 24/11/2011, à 18:46

serged

Re : Comparaison de deux chaines

Ou filtrer avectr :

...
tr -d \r <file.txt | while...

LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne