Назад | Перейти на главную страницу

grep вопрос, как отфильтровать несколько типов шаблонов?

Я консольный новичок. Насколько я знаю, сопоставление нескольких шаблонов вроде этого:

aaa|bbb

Но, | символ является каналом на консоли, так как я могу указать эти несколько шаблонов для grep?

Вы можете выйти из трубы и заключить узор в кавычки:

grep "aaa\|bbb"

или используйте -E:

grep -E "aaa|bbb"

или

grep -E aaa\|bbb

Поместите "" между вашим шаблоном, например egrep "toto|name"

Или ты идешь

grep -ie aaa -ie bbb filename

для поиска aaa или bbb в имени файла с помощью grep без учета регистра.

Наконец, вы можете поместить свои шаблоны в файл и использовать флаг -f. Так grep -f patternlist.txt files. Где patternlist.txt - это просто:

aaa
bbb
Make sure there are no empty lines, though.

- Кристофер Карел

Заключите шаблон в одинарные кавычки:

grep -E 'aaa|bbb'

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

grep -E "its|it's"

Если он содержит как одинарные, так и двойные кавычки, заключите его в двойные кавычки и поставьте перед символами обратную косую черту. ", $, ` и \:

grep -E "its|it's|letter \"e\"|pay \$20|\`a'|C:\\\\AUTOEXEC\\.BAT"

Последний пример C:\AUTOEXEC.BAT учитывает, что обратная косая черта является особенной как для оболочки, так и для синтаксиса регулярных выражений egrep.

PS: The страница цитирования bash обязательно к прочтению.

egrep "aaa|bbb|ccc" <file>

найдет все строки с aaa ИЛИ bbb ИЛИ ccc в файле

egrep -i "aaa|bbb|ccc" <file>

найду aaa ИЛИ aaA ИЛИ aAa ИЛИ Aaa ИЛИ aAA ИЛИ AAa ИЛИ AAA ИЛИ ... и то же самое для всех остальных строк, перечисленных между конвейером | персонажи.