#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. :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