Попытка передать регулярное выражение в grep - PullRequest
2 голосов
/ 15 октября 2010

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

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

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

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

bash: syntax error near unexpected token `('

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

Ответы [ 4 ]

4 голосов
/ 15 октября 2010

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

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

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

3 голосов
/ 15 октября 2010

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

grep -i error report.txt

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

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

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

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

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

1 голос
/ 15 октября 2010

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

grep -i error report.txt
0 голосов
/ 15 октября 2010

это даст тот же результат

cat report.txt | grep -i error

и если вы хотите разбить результаты на страницы:

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