grep несколько шаблонов и вывод результатов с соответствующим шаблоном

grep несколько шаблонов и вывод результатов с соответствующим шаблоном

Мне нужно выполнить grep для нескольких файлов с несколькими значениями. Например: grep -f filename.txt /home/* -R
(имя_файла.txt содержит несколько значений)

Но мне нужно знать, какой файл содержит какое значение.
Например: /home/blah.txt содержит значение1, /home/aaa.txt содержит значение2 и т. д.

какие-либо предложения?

решение1

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

Вы можете попробовать следующую команду:

grep -R -f filename.txt /home/*будет искать любой шаблон внутри вашего filename.txtфайла и рекурсивно сопоставлять его со всеми файлами внутри вашей домашней папки. Вы получите такой вывод:

#here my filename contains the entries bash and Bingo
$grep -R -f filename.txt /home/*
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:awk -v RS=END_WORD '/Bingo1/ && /Bingo2/' test2.txt | grep -o 'Pokeman.*'

grepвыведет имя файла и полную строку, содержащую ваш шаблон.

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

#here the -o flag only displays the matched values, and -n adds the line number
$grep -R -o -n -f test /home/*
/home/user/.bash_history:128:bash
/home/user/.bash_history:156:bash
/home/user/.bash_history:193:Bingo

решение2

Это должно подойти для вашей ситуации:

grep -HRnF '<pattern>' . --include "<file_name>"

Итак, чтобы найти слово «test» во всех файлах, заканчивающихся на .txt, используйте что-то вроде:

grep -HRnF 'test' . --include "*.txt"

решение3

В GNU grepесть опция -o:

-o, --only-matching

Вывести только совпавшие (непустые) части совпадающей строки, причем каждую такую ​​часть следует вывести на отдельной строке вывода.

Так что это должно сделать то, что вы хотите.

grep -f filename.txt -R -H -o /home/*

Обратите внимание, что я также добавил -H(-with-filename), чтобы всегда печатать имя файла.

Связанный контент