10
[Computer]$ grep "foo|bar" filename

Я понимаю, что приведенная выше команда должна возвращать каждую строку в имени файла, где есть "foo" или "bar". Справочные страницы подтверждают | как регулярное выражение или символ и код работает для "foo" и "bar" независимо. Что мне не хватает?

1 ответ1

20

По умолчанию grep использует базовые регулярные выражения (BRE). Со страницы руководства:

Основные против расширенных регулярных выражений: в основных регулярных выражениях метасимволы?, +, {, |, (И) теряют свое особое значение; вместо этого используйте версии с обратной косой чертой \?, +, {, \|, (и).

Таким образом, вы либо должны избежать |:

grep "foo\|bar" filename 

или включите расширенные регулярные выражения:

grep -E "foo|bar" filename

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .