grep: "^."не соответствует правильно - PullRequest
3 голосов
/ 27 августа 2010

Может кто-нибудь объяснить, почему этот код не работает должным образом?Я ожидал бы, что он будет соответствовать только первому символу, и это происходит с литеральными символами, но классы подстановочных знаков (.) И символов ведут себя странно:

Я использую -o только для демонстрации того, как все соответствует,не меняет то, что соответствует вообще.

$ echo foo | grep -o '^.'
f
o
o

Некоторое более неожиданное поведение:

$ echo foobarbazquux | grep -o '^[foarqux]'
f
o
o

$ echo foobarbazquux | grep -o '^.[^u]'
fo
ob
ar
ba
zq

По существу, сопоставление начала строки (^) не ведет себя должным образом в этихслучаев.Есть ли способ заставить его вести себя более нормально?

Ответы [ 2 ]

5 голосов
/ 27 августа 2010

Нашли:

ошибка

Журнал исправлений

Видимо исправлено в 2.5.2. Нашел через панель запуска.

0 голосов
/ 27 августа 2010

Из моей коробки с Ubuntu 10.04:

marc@panic:~$ echo foo | grep -o '^.'
f
marc@panic:~$ echo foobarbazquux | grep -o '^[foarqux]'
f
marc@panic:~$ echo foobarbazquux | grep -o '^.[^u]'
fo
marc@panic:~$ grep --version
GNU grep 2.5.4

Существует ряд переменных среды, которые grep будет искать для управления своим поведением / выводом, поэтому проверьте, установлены ли какие-либо из них. Скорее всего, у вас есть набор GREP_OPTIONS.

...