78 votes

Comportement des espaces blancs avec les expressions rationnelles grep

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 pls, pourquoi je ne peux pas utiliser \s mais \s* et \s[E] appariés?

OS: Ubuntu 10.04, grep v2.5

Merci d'avance, milde

105voto

Kamal Points 1256

Cela ressemble à une différence de comportement dans la gestion de l' \s entre grep 2.5 et les versions plus récentes (un bug dans le vieux grep?). Je confirme ce résultat avec grep 2.5.4, mais tous les quatre de vos grep faire le travail lors de l'utilisation de grep 2.6.3 (Ubuntu 10.10).

Note:

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

alors que

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

Probablement moins de problèmes (comme \s n'est pas documentée):

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

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

1voto

mikel Points 10793

Je ne pense pas qu'il ya quelque chose de mal avec votre regexes, et vous devriez être en mesure d'utiliser \s comme vous le décrivez. De les essayer à http://www.online-utility.org/text/grep.jsp et d'autres regex tests, ils correspondent tous (au moins si vous modifiez \{2\} juste {2}).

Edit: Le grep 2.6 notes de dire que c' fixes an unexpectedly large number of flaws, from outright bugs (surprisingly many, considering this is "grep"), donc je pense que Kamal de réponse à ce sujet étant un grep bug est probablement la bonne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X