Подтвердить что ты не робот

Пробельное поведение регулярного выражения grep

У меня есть текстовый файл, содержащий что-то вроде:

12,34 EUR 
 5,67 EUR
 ...

Есть один пробел перед "EUR", и я игнорирую 0, XX EUR.

Я пробовал:

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 !

Может кто-нибудь объяснить мне PLS, почему я не могу использовать \s, но \s* и \s[E] соответствует?

ОС: Ubuntu 10.04, grep v2.5

4b9b3361

Ответ 1

Это выглядит как разница в поведении при обработке \s между grep 2.5 и более новыми версиями (ошибка в старой grep?). Я подтверждаю ваш результат с помощью grep 2.5.4, но все четыре команды grep работают при использовании grep 2.6.3 (Ubuntu 10.10).

Примечание:

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

тогда

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

Вероятно, меньше проблем (поскольку \s не документировано):

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

Мой совет: не использовать \s... использовать [ \t]* или [:space:] или что-то вроде этого.