1

Задача:
1) найти строку 'decor' внутри файлов в каталоге
2) получить количество вхождений для оформления для каждого файла, в котором оно есть

Первая часть проблемы частично решена с помощью find . -type f | grep -i decor *
Но это не похоже на grep для всех файлов, найденных в find а скорее на то, что находится в верхней части текущего каталога.
Нужно ли использовать что-то кроме * для grep и grep для файлов, найденных из find?

что нужно передать, чтобы оно отображалось с именем файла и количеством вхождений для декорации для каждого файла?

4 ответа4

2

"Файлы в каталоге" обычно не означает "и подкаталоги iside рекурсивно". Я бы просто использовал

grep -c decor *

Если вам также нужен поиск в подкаталогах, вы можете использовать find, но соединять команды по-другому: pipe просто соединяет вывод первой команды со входом второй. Grep не ожидает списка файлов на входе.

find . -type f -exec grep -cH decor {} + | grep -v :0
2

Ты можешь сделать:

find . -type f -exec grep -icH decor {} \; | grep -v :0\$

Это получит имя файла и количество каждого совпадения и удалит файлы со счетом 0, используя отправленный по каналу egrep

0

TMTOWTDI - мне нравится видеть другие варианты, так что вот и мой:

$ find . -type f -exec egrep -li decor {} \;

$ perl -e '$c=0; while(<>){$c++ if /decor/;} continue {if(eof){print("$ARGV:$c\n"); close ARGV; $c=0;} }' *

Просто потому, что мне хотелось переписать Perl 1-liner, который выполняет то же самое, что и старый пример awk взятый со страниц Kernighan и Pike.

0

Вы можете использовать опцию -exec. find . -type f -exec grep decor {} \;

или используйте поиск xargs find . -type f | xargs -i grep decor {}

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