Показывает, какие файлы соответствуют grep, который просматривает все файлы из коллекции - PullRequest
1 голос
/ 29 марта 2012

Предположим, у меня есть коллекция таких файлов:

echo -e "apple\n cherry" >> f1.txt; 
echo -e "grape\n strawberry" >> f2.txt; 
echo -e "orange\n cherry" >> f3.txt; 

И я хочу найти каждый файл, в котором есть слово "cherry".Я могу сделать это:

ls *.txt | xargs cat | grep cherry

Но это просто возвращает две строки, совпадающие с f1 и f3, без отображения «исходных» файлов, например:

cherry
cherry

I 'Мне бы хотелось увидеть файлы, откуда пришли эти совпадения - примерно так:

f1.txt ->  cherry 
f3.txt ->  cherry

Есть ли способ сделать это просто из командной строки?

Ответы [ 5 ]

3 голосов
/ 29 марта 2012

Опция -l означает, что grep будет печатать только совпадающие имена файлов, а не совпадающие строки, поэтому ваша задача может быть достигнута с помощью:

$ grep -l cherry *.txt
f1.txt
f3.txt

(Обратите внимание, чтоxargs не нужны для этой задачи, grep рассматривает все, кроме первого из своих позиционных аргументов, как файлы для просмотра)

3 голосов
/ 29 марта 2012
jcomeau@intrepid:/tmp$ echo -e "apple\n cherry" >> f1.txt; 
jcomeau@intrepid:/tmp$ echo -e "grape\n strawberry" >> f2.txt; 
jcomeau@intrepid:/tmp$ echo -e "orange\n cherry" >> f3.txt; 
jcomeau@intrepid:/tmp$ grep cherry *txt
f1.txt: cherry
f3.txt: cherry
2 голосов
/ 29 марта 2012

Попробуйте grep -H напечатать имя файла и совпадение. Со страницы руководства:

   -H, --with-filename
          Print  the  file  name for each match.  This is the default when
          there is more than one file to search.

Я считаю, что это полезно при использовании grep с find.

1 голос
/ 29 марта 2012

Когда вы делаете ls *.txt | xargs cat, вы получаете один объединенный поток данных, поэтому информация об именах файлов теряется и не может быть восстановлена ​​последующим grep.

Это должно работать:

ls *.txt | xargs grep cherry

или даже проще:

grep cherry *.txt
0 голосов
/ 29 марта 2012

grep cherry * .txt Это должно сделать это для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...