2017-01-30 18 views
-2

Я пытаюсь grep шаблон в неизвестном файле в каталоге с большим количеством файлов. Я обычно выполнить следующий код:bash использовать вывод find с grep

$ grep 0RY7HYLA in ./*8017*/*diag* 

Однако, потому что я искал файлы в очень большой папке файлов я не могу использовать Grep напрямую, потому что операция потребляет слишком много трафика. Мне нужно использовать команду find в сочетании с grep. Я изо всех сил, чтобы трубы вывода команды находят в качестве входных данных для команды Grep т.е.

find ./*8017*/*diag* -maxdepth 3 -type f -name output_log -exec egrep -l '0RY7HYLA' {} \; | grep 0RY7HYLA 

Приведенный выше код не работает, т.е. не выводится из выполнения этого кода. Если я только исполняю код перед каналом, он выводит файл и каталог, но с grep нет выхода.

Во-вторых, я должен поставить это в условном операторе, что-то вроде:

if find ./*8017*/*diag* -maxdepth 3 -type f -name output_log -exec egrep -l '0RY7HYLA' {} \; ; then grep 0RY7HYLA ???????? ; fi 

Является ли это выполнимо?

+0

Каков ваш желаемый результат? Вы пытаетесь напечатать строки, соответствующие обеим строкам? –

+0

«Вышеприведенный код не работает». -> Зачем ты так говоришь? Вернул ли неожиданный результат или не вернул ожидаемый результат или, может быть, он отобразил ошибку? – Aaron

+0

Я только что добавил более подробное объяснение этому утверждению. – stevo

ответ

0

Если я понял правильно, я думаю, что то, что вы пытаетесь сделать, может быть решен с помощью следующей команды:

find . -type f -print0 | xargs -0 grep "0RY7HYLA" 

Это напечатает вхождения «0RY7HYLA» в файлах в текущем каталоге.

+0

Почему бы просто не использовать '-exec grep '0RY7HYLA' {} +' вместо того, чтобы включать 'xargs'? –

+1

Я посмотрю, я не знаю ни одного флага -exec, ни {} +. Спасибо за назначение! – Pol

 Смежные вопросы

  • Нет связанных вопросов^_^