comportement des espaces blancs de grep regex


87

J'ai un fichier texte, contenant quelque chose comme:

12,34 EUR 
 5,67 EUR
 ...

Il y a un espace avant «EUR» et j'ignore 0, XX EUR.

J'ai essayé:

grep '[1-9][0-9]*,[0-9]\{2\}\sEUR' => didn't match !

grep '[1-9][0-9]*,[0-9]\{2\} EUR' => worked !

grep '[1-9][0-9]*,[0-9]\{2\}\s*EUR' => worked !

grep '[1-9][0-9]*,[0-9]\{2\}\s[E]UR' => worked !

Quelqu'un peut-il m'expliquer, pourquoi je ne peux pas utiliser \smais \s*et \s[E]correspondre?

Système d'exploitation: Ubuntu 10.04, grep v2.5

Réponses:


122

Cela ressemble à une différence de comportement dans la gestion \sentre grep 2.5 et les versions plus récentes (un bogue dans l'ancien grep?). Je confirme votre résultat avec grep 2.5.4, mais tous les quatre de vos greps fonctionnent lorsque vous utilisez grep 2.6.3 (Ubuntu 10.10).

Remarque:

GNU grep 2.5.4
echo "foo bar" | grep "\s"
   (doesn't match)

tandis que

GNU grep 2.6.3
echo "foo bar" | grep "\s"
foo bar

Probablement moins de problèmes (comme cela \sn'est pas documenté):

Both GNU greps
echo "foo bar" | grep "[[:space:]]"
foo bar

Mon conseil est d'éviter d'utiliser \s... utiliser [ \t]*ou [[:space:]]ou quelque chose comme ça à la place.


24
Ou juste [:space:], par exemple. comme ceci:cat file | grep "[[:space:]]"
Kiril Kirov

cela semble être un bogue dans la nouvelle version de grep (autre point de vue) selon cette requête de bogue mail-archive.com/bug-grep@gnu.org/msg02686.html mais pourquoi la dernière déclaration correspond-elle?
Milde

1
@Milde, notez le post de suivi mail-archive.com/bug-grep@gnu.org/msg02689.html où ce rapport de bogue a été marqué comme invalide et fermé (donc ce n'est pas considéré comme un bogue dans le nouveau grep).
Kamal

2
@Milde, aucune de la documentation grep que j'ai examinée (ancienne ou nouvelle) ne fait référence du \stout. Je dirais que son comportement est "indéfini". Utilisez plutôt [: space:], qui fonctionne comme documenté dans l'ancien et le nouveau grep.
Kamal

merci, je vais utiliser [: space:] à l'avenir pour éviter le problème
Milde
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.