grep chování regex mezery

hlasů
55

Mám textového souboru, který obsahuje něco jako:

12,34 EUR 
 5,67 EUR
 ...

Je tam jeden mezery před ‚EUR‘, a já jsem ignorovat 0, XX EUR.

Zkusil jsem:

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 !

Může mi někdo vysvětlit, pls, proč nemohu použít \s, ale \s*i \s[E]uzavřeno?

OS: Ubuntu 10.04, grep v2.5

Položena 20/11/2010 v 15:21
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
80

Vypadá to jako rozdíl v chování při nakládání s \smezi grep 2.5 a novější verze (chyba ve starém grep?). Potvrzuji svůj výsledek s grep 2.5.4, ale všechny čtyři ze svých greps dělat práci při použití grep 2.6.3 (Ubuntu 10.10).

Poznámka:

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

zatímco

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

Pravděpodobně méně potíže (jako \snení zdokumentováno):

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

Moje rada je, aby se zabránilo používání \s... použití [ \t]*nebo [[:space:]]nebo něco podobného místo.

Odpovězeno 20/11/2010 v 17:21
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more