4

Я пытаюсь выполнить двойной поиск в файлах и вернуть имена файлов.

я использую

find ./ -iname '*txt' | xargs grep "searchtext" -sl

чтобы найти имена файлов с 'searchtext' в них.

Команда возвращает список файлов.

Как я могу найти "othersearchtext" в этих уже найденных файлах и показать их таким же образом?

3 ответа3

5

Передайте результат другому grep с помощью обратных кавычек или эквивалентного $().

Если вы хотите сохранить промежуточный список, используйте tee

grep -l oranges $(find . -name "*txt" | xargs grep -l apples | tee apples.txt)
1

Вы можете xargs grep …:

find . -iname '*txt' | \
    xargs grep -l "searchtext" | \
    xargs grep -l "othersearchtext" | \
    xargs grep -l "yetanothersearchtext"
0

Этот bash будет рекурсивно искать несколько строк в заданной папке и возвращать имена файлов

Использование:

findfiles /var/www/ php searchText1 searchText2 searchText3 searchText4

bash: findfiles

#!/bin/sh

DIR=$1
EXT=$2

CMD="find $DIR -iname '*.$EXT' | xargs grep -l '$3' | xargs grep -l '$4' | xargs grep -l '$5' | xargs grep -l '$6' | xargs grep -l '$7' | xargs grep -l '$8' | xargs grep -l '$9'"

eval $CMD

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .