Grep и regex: противоречивое поведение - PullRequest
2 голосов
/ 06 июля 2010

Я работал над Linux box A, и я запускаю это:

grep '^\S*\s-' access_log

Это отображало некоторые строки, как и ожидалось.

Затем я перешел на машину B и я запустил точнота же команда.Но на этот раз это не сработало.
Мне пришлось запустить это, чтобы сделать то, что мне нужно:

grep '^[^ ]* -' access_log  

Прежде чем преуспеть, я попробовал все это, но безуспешно:

grep '^\S* -' access_log  
grep '^\S*\s-' access_log      
grep -e '^\S* -' access_log   
grep -E '^\S* ' access_log    

Похоже, что машина B не понимает метасимволы \ S и \ s.

Оба блока работали: grep 2.5.1 и bash 3.2.25

Как это возможно?

Приветствия, Дэн

1 Ответ

1 голос
/ 06 июля 2010

Судя по справочной странице grep . Кажется, что если вы можете использовать такие вещи, как \s, вы используете регулярные выражения Perl. Которые используются, когда опция -P передается в grep. Поэтому может случиться так, что эта опция будет установлена ​​автоматически на машине A, а не на машине B. Причиной этого может быть какой-то псевдоним или опция установлена ​​в GREP_OPTIONS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...