Как использовать grep для поиска нескольких вариантов

4

Как я могу использовать grep для поиска строки с «res» или «rep»?

я пытаюсь "grep -e res | rep" или gre -e "rep | rep" но это не работает.

michael
источник

Ответы:

13

Вы также можете использовать опцию -E с grep, поэтому вам не нужно экранировать «|», например:

Файл grep -E 'res | rep'

Или вы можете использовать egrep, то же самое, что и grep -E:

файл egrep 'res | rep'

Goran Jurković
источник
Это не работает для меня на OS X, когда я сделал pmset -g sched | grep -E "shutdown|restart|sleep", (Ни один не использовал egrep.)
2rs2ts
7

Вам нужно экранировать символ трубы:

grep 'res\|rep' file

или использовать несколько -e опции:

grep -e 'res' -e 'rep' file
Dennis Williamson
источник
0
  • Тип регулярного выражения:

    РЕДАКТИРОВАТЬ grep -nis "re[sp]" <FILENAME>

  • Таким образом, вам будут представлены все строки, содержащие «res» или «rep»

  • также обратите внимание, что -nis здесь не важно, мне просто так нравится ... :)

Dlf
источник
1
Вероятно, вы хотите убежать re[sp] чтобы он не был случайно раскрыт оболочкой при наличии файлов с именем res или rep.
hlovdal
В этом нет необходимости, поскольку он стоит первым после списка параметров и как таковой интерпретируется как шаблон.
Dlf
2
Комментарий Хловдала правильный. Данный ответ прекратится, если существуют файлы с именами res и rep, потому что оболочка преобразует командную строку в «grep -nis rep res & lt; FILENAME & gt;» Следовательно, вы не найдете вхождений 'res' - вместо этого вы будете искать 'rep' в файлах 'res' и & lt; FILENAME & gt ;.
Jonathan Hartley
Добавлены двойные кавычки, чтобы гарантировать правильную интерпретацию шаблона.
Dlf