Почему мои результаты различаются между ag и grep?

У меня возникают проблемы с правильным (и безопасным) выполнением правильного поиска регулярных выражений с помощью grep. Кажется, я могу делать то, что хочу, используя ag

Что я хочу сделать на простом английском языке:

Искать в моем текущем каталоге (рекурсивно?) файлы, строки которых содержат слова "вложенный" и "объединить"

Успешная попытка с ag:

$ ag --depth=2 -l "nested.*merge|merge.*nested" .
   scratch.md
   scratch.rb

Неудачная попытка выполнить grep:

$ grep -elr 'nested.*merge|merge.*nested' .
   grep: nested.*merge|merge.*nested: No such file or directory
   grep: .: Is a directory

Что мне не хватает? Кроме того, можно ли улучшить любой подход?

Спасибо!


person wcpines    schedule 19.12.2016    source источник


Ответы (2)


В вашем случае вы можете использовать grep -lr 'nested.*merge\|merge.*nested' или grep -Elr 'nested.*merge|merge.*nested'.
Кроме того, в последнем случае E означает использование синтаксиса регулярного выражения ERE, поскольку grep будет использовать BRE по умолчанию, где | будет соответствовать символу |, а \| означает or.
Подробнее о ERE и BRE можно прочитать в этой статье.

person Xiangyu.Wu    schedule 19.12.2016

Вероятно, вы хотите -E, а не -e, или просто egrep.

man grep поможет вам понять, почему -e выдал вам эту ошибку.

person Mort    schedule 19.12.2016