Выводить несколько файлов из одного grep?

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

$ grep -E "MY PATTERN" myfile{1,3} 

Затем выпишите новые файлы, содержащие соответствующие строки:

 matches-myfile1 matches-myfile2 matches-myfile3 

Это возможно? Как я могу это сделать? Я ищу ответ bash или zsh.

5 Solutions collect form web for “Выводить несколько файлов из одного grep?”

Бонси имеет правильную идею, но не правильный подход (например, что делать с именами файлов, содержащими пробелы или другие пробельные символы). Вот способ сделать это в bash :

 for file in myfile{1,3}; do grep -E "MY PATTERN" < "$file" > "matches-$file" done 

Если вам нужно было сохранить файлы, вы должны правильно учитывать расщепление слов, например:

 files=( myfile{1,3} ) for file in "${files[@]}"; do grep -E "MY PATTERN" < "$file" > "matches-$file" done 

Один из способов использования awk:

 awk '/MY PATTERN/{print > "matches-"FILENAME;}' myfile{1,3} 

я не думаю, что это возможно, однако можно построить небольшой скрипт для этого

 #! /bin/bash files=(file1 file2 file3) for i in "${files[@]}"; do grep -E "MY PATTERN" < "$i" > matches-"$i"; done 

Вы можете сделать это с помощью GNU find и GNU parallel:

 find . -type f -print0 | parallel -0 grep '"MY PATTERN"' '{} > {//}/matches.{/}' 

Вы можете сделать grep вывести имя файла с помощью -H , а затем использовать awk для записи на него.

 $ grep -H regexp files* | awk -F : '{ file="matches-" $1; sub("^[^:]+:","",$0); print $0 > file; }' 
  • Как правильно собрать массив строк в zsh
  • Переключение на `zsh`: все ли скрипты bash совместимы с` zsh`?
  • find -exec on zsh: эхо работает, как и ожидалось, печать не
  • Как я могу использовать «emulate sh» в zsh для работы с ». myscript.sh»?
  • обмена или синхронизации истории между Zsh и Bash
  • Портативный способ получить абсолютный путь скрипта?
  • Выберите текст в терминале urxvt с помощью Shift + Arrow или Ctrl + Shift + Arrow
  • Как удалить все, кроме числовых каталогов верхнего уровня?
  • Сценарий с ошибкой «команда не найдена: ^ M»
  • zsh завершение по истории не работает
  • Вкладка автозаполнения акцентированных символов с помощью oh-my-zsh не работает
  • Что эквивалентно «stty -echo» для zsh?
  • Linux и Unix - лучшая ОС в мире.