J'ai un fichier texte contenant quelque chose comme:
12,34 EUR
5,67 EUR
...
Il y a un espace blanc 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 \s
mais \s*
et \s[E]
apparié?
Système d'exploitation: Ubuntu 10.04, grep v2.5
Cela ressemble à une différence de comportement dans le traitement de \s
entre grep 2.5 et les versions plus récentes (un bogue dans le vieux grep?). Je confirme votre résultat avec grep 2.5.4, mais vos quatre greps fonctionnent quand 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 \s
n'est pas documenté):
Both GNU greps
echo "foo bar" | grep "[[:space:]]"
foo bar
Mon conseil est d'éviter d'utiliser \s
... utilisation [ \t]*
ou [[:space:]]
ou quelque chose comme ça à la place.