Grep 2.10 et 2.12, différence

Bonjour à tous

/tmp/fichier contient un seul caractère nul.

Avec grep 2.10:

$ if (cat /tmp/fichier | grep -q -E “^[0-9 ]*$”) ; then echo Yop ; fi
$

Avec grep 2.12:
$ if (cat /tmp/fichier | grep -q -E “^[0-9 ]*$”) ; then echo Yop ; fi
Yop
$

Est ce voulu ou bien est un bug et il faut faire un rapport à votre avis?

As-tu comparé l’affichage de sortie et le code de sortie de cette commande avec ces versions de grep ?

En gros, pour chaque version, que te retourne :

et (à effectuer juste après sans autre commande entre les deux)

[quote=“fran.b”]/tmp/fichier contient un seul caractère nul.
[…]
Est ce voulu ou bien est un bug et il faut faire un rapport à votre avis?[/quote]
Je n’ai rien vu qui puisse avoir un rapport avec ça dans le changelog : fossies.org/unix/misc/grep-2.14. … -2.14/NEWS

Salut,

Avec grep 2.12

[quote]gerard@glu:/tmp$ if ( cat /tmp/fichier | grep -q -E “^[0-9 ]*$”) ; then echo Yop ; fi
gerard@glu:/tmp$
[/quote]

Oui, c’est cohérent:

boisson@debian:/tmp$ if (cat /tmp/fichier | grep -q -E "^[0-9 ]*$") ; then echo Yop ; fi Yop boisson@debian:/tmp$ ./test.sh 0 Yop boisson@debian:/tmp$ su root@debian:/tmp# dpkg -i /home/boisson/Téléchargements/grep_2.10-1_amd64.deb dpkg : avertissement : dégradation (« downgrade ») de grep depuis 2.12-2 vers 2.10-1 (Lecture de la base de données... 180313 fichiers et répertoires déjà installés.) Préparation du remplacement de grep 2.12-2 (en utilisant .../grep_2.10-1_amd64.deb) ... Dépaquetage de la mise à jour de grep ... Paramétrage de grep (2.10-1) ... Traitement des actions différées (« triggers ») pour « install-info »... Traitement des actions différées (« triggers ») pour « man-db »... root@debian:/tmp# exit boisson@debian:/tmp$ ./test.sh 1 boisson@debian:/tmp$ cat test.sh #!/bin/sh cat /tmp/fichier | grep -q -E "^[0-9 ]*$" echo $? if (cat /tmp/fichier | grep -q -E "^[0-9 ]*$") ; then echo Yop ; fi boisson@debian:/tmp$

Je précise que j’ai fait le test sur 3 machines amd64 wheezy à jour. L’une (celle ci dessus) installée d’hier…

Pour être précis:

boisson@debian:/tmp$ grep -E "^[0-9 ]*$" /tmp/fichier Fichier binaire /tmp/fichier concordant boisson@debian:/tmp$dpkg -l | grep grep ii grep 2.12-2 amd64 GNU grep, egrep and fgrep

boisson@debian:/tmp$ grep -E "^[0-9 ]*$" /tmp/fichier boisson@debian:/tmp$ dpkg -l | grep grep ii grep 2.10-1 amd64 GNU grep, egrep and fgrep boisson@debian:/tmp$

Cela dit, le résultat de grep 2.12 me paraît tout à fait correct : ton motif correspond soit à des lignes vides, soit à des lignes composées uniquement de chiffres.
Étant donné que ton fichier contient seulement un caractère nul, la seule et unique ligne du fichier ne correspond pas au motif.
À moins que j’aie loupé quelque chose le bug est dans grep 2.10 pas dans le 2.12.

Remarquez, je viens de noter que c’est en fait la version 2.12 qui est cohérente mais il est ennuyeux qu’une modification comme celle là ne soit pas dans les changelog (j’avais vérifié)…

edit: même reflexe que toi… mais c’est le fait que le changement ne soit pas signaler qui m’énerve, j’ai un script qui a planté à cause de cela et ça m’a pris longtemps à débugguer

Demande plus d’info sur le Mailing liste, non ?

[quote=“syam”]Cela dit, le résultat de grep 2.12 me paraît tout à fait correct : ton motif correspond soit à des lignes vides, soit à des lignes composées uniquement de chiffres.
Étant donné que ton fichier contient seulement un caractère nul, la seule et unique ligne du fichier ne correspond pas au motif.
À moins que j’aie loupé quelque chose le bug est dans grep 2.10 pas dans le 2.12.[/quote]

Ben non, justement, regardant une deuxième fois,

boisson@debian:/tmp$ grep -E "^[0-9 ]*$" /tmp/fichier Fichier binaire /tmp/fichier concordant boisson@debian:/tmp$dpkg -l | grep grep ii grep 2.12-2 amd64 GNU grep, egrep and fgrep

Le fichier est non nul et contient une ligne composée de \0, donc ça ne devrait pas correspondre… C’est le 2.10 qui fonctionne. la ligne n’est pas vide, elle contient des caractères nuls. Par ailleurs grep le considère bien comme un fichier binaire. La réponse du 2.12 est incohérente.

Ah oui merde. Au temps pour moi. C’est embêtant ça d’avoir le raisonnement juste mais d’en tirer la mauvaise conclusion. :blush:

C’est à cause de ça:

totoche:/home/francois/Clef/V1# /bin/true totoche:/home/francois/Clef/V1# echo $? 0 totoche:/home/francois/Clef/V1# /bin/false totoche:/home/francois/Clef/V1# echo $? 1 totoche:/home/francois/Clef/V1# Ça nuit à l’intuition…