Печать имени файла перед строками вывода, подобранными по шаблону grep

#linux #shell #awk #sed

#linux #оболочка #awk #sed

Вопрос:

Я хочу распечатать содержимое строки подобранного шаблона из входного файла в выходной файл. Я использую:

     grep -hnr "pattern" ./input.txt > output.txt 

  

Output.txt файл похож:

 this line has the word pattern in it 

  

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

 input this line has the word pattern in it 
  

Если шаблон совпадает несколько раз во входном файле, я хочу напечатать имена файлов несколько раз. Например:

 input this line has the word pattern in it 
input this line also has same pattern
  

и, наконец, я хочу сделать это в каталоге со многими входными файлами (формат *.txt) и сгенерировать один output.txt файлы со всеми результатами.

Комментарии:

1. Просто сделайте grep -hnr pattern ./*.txt . Если вы перечисляете несколько входных файлов, grep по умолчанию напечатает имя файла, которое соответствует.

2. Все инструменты UNIX имеют страницы руководства. man grep .

Ответ №1:

Просто используйте :

  grep -H "pattern" ./input.txt > output.txt 
  

От man grep :

-H, —with-filename
Выведите имя файла для каждого соответствия. Это значение по умолчанию, когда требуется выполнить поиск по нескольким файлам.

-h, —no-filename
Подавляют добавление префиксов к именам файлов при выводе. Это значение по умолчанию, когда для поиска требуется только один файл (или только стандартный ввод).