2010-10-15 2 views
2

Я пытаюсь exctract линии ошибки из моего файла журнала:Попытка передать регулярное выражение Grep

я использовал это:

more report.txt | grep -E (?i)(error) 

Я получаю сообщ об ошибке:

bash: syntax error near unexpected token `(' 

Что я делаю неправильно? Я пытаюсь извлечь все строки, содержащие «Error» не обращая внимания на чувствительность к регистру, поэтому он может быть ошибка, ошибка, и т.д. ERROR

ответ

3

Вы можете сделать:

grep -i error report.txt 

Нет необходимости в файле more, а затем передать его на номер grep. Вы можете передать имя файла в качестве аргумента в grep.

Чтобы сделать регистр поиска нечувствительным, вы используете опцию -igrep.

И действительно нет необходимости идти на использование -E как шаблон, который вы используете error не является расширенным регулярным выражением.

Причиной ошибки вы видите, что ваш шаблон (?i)(error) интерпретируется оболочкой и с оболочкой, не за исключением того, чтобы увидеть ( в этом контексте возникает ошибка, что-то подобное, когда вы делаете ls (*).

Чтобы исправить это, вы указываете свой шаблон. Но это не решит вашу проблему поиска error в файле, потому что шаблон (?i)(error) ищет строку 'ierror' !!

1

вы можете использовать

grep -i error report.txt 
0

это будет достичь того же результата

cat report.txt | grep -i error 

и если вы хотите, чтобы разбиваться результаты:

cat report.txt | grep -i error | more 
+0

это так называемое бесполезное использование cat: grep -i error report.txt | больше делает то же самое :-) – WMR

4

Проблема с вашей линии является то, что круглые скобки подбираются оболочки вместо grep, вам необходимо указать их:

grep -E '(?i)(error)' report.txt 

Для этой конкретной задачи другой ответы, конечно, правильные, вам даже не нужны парнеры.

Смежные вопросы