LINUX.ORG.RU

Что-то непонятное с grep


0

1

Можете мне объяснить такие странности?

$ echo 2010 | grep «[0-9]*» -o
2010
$ echo 2010 | grep [0-9]* -o
2010
$ uptime | grep «[0-9]*» -o
$ uptime | grep «[0-9]» -o
1
1
...
$ uptime | grep «[0-9]»
11:44:09 up 21 days, 16:43, 2 users, load average: 0.00, 0.03, 0.06

Почему grep не находит блоки цифр в выводе uptime? Хотя в выводе echo находит. И по отдельности цифры находит тоже.

Ответ на: комментарий от annoynimous

[root@sl03500008056 ~]# grep -V | head -1
grep (GNU grep) 2.5.1
[root@sl03500008056 ~]# uname -a
Linux sl03500008056 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

Dimka-Bo
() автор топика
Ответ на: комментарий от GotF

Так работает. `uptime | grep «[0-9]\*» -o` - не работает.

Можно воспользоваться плюсом, но мне интересно, почему так? И почему у других работает?

Dimka-Bo
() автор топика

Похоже, это баг, так как в 2.5.1 не работает:

echo " 2010" | grep '[0-9]*' -o

mky ★★★★★
()

Локаль ru_RU ?

anonymous
()

а что с

grep -o '[0-9]\+'

anonymous
()
Ответ на: комментарий от Dimka-Bo

кстати, на CentOS не работает точно также, как и у тебя. Странно. Такое ощущение, что квантор '*' нежадный, т.е. он не захавывает все совпадения. А может это оптимизация: поскольку ни один элемент регулярного выражения '[0-9]*' не является обязательным, следовательно, оно совпадает с любой наперед заданной строкой

annoynimous ★★★★★
()

Да, какой-то баг, специфичный не то для RH, не то для версии грепа. Дома (Ubuntu + grep 2.5.4) работает нормально. Попробую завтра обновить.

Dimka-Bo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.