Regex для "або" декількох слів у греппі


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

Я розумію, що вищевказана команда повинна повертати кожен рядок у назви файлу, де є вихід "foo" або "bar". Сторінки людини підтверджують | як Regex або символ, і код працює для "foo" і "bar" незалежно. Що я пропускаю?

Відповіді:


21

grep використовує основні регулярні вирази (BRE) за замовчуванням. На чоловіковій сторінці:

Основні проти розширених регулярних виразів: у основних регулярних виразах мета-символи?, +, {, |, (І) втрачають своє особливе значення; замість цього використовуйте зменшені версії \ ?, +, {, \ |, (і та).

Тож вам або доведеться уникати |:

grep "foo\|bar" filename 

або ввімкніть розширені регулярні вирази:

grep -E "foo|bar" filename

Я бачив це на сторінці людини і неправильно зрозумів. Я думав, це означає, що \ | змушує шукати повний вираз "foo | bar" на відміну від окремих виразів. Дякуємо за швидку відповідь!
Ocasta Eshu

4
Ви також можете використовувати egrep(псевдонім для grep -E) замість grep.
лектор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.