Выводить несколько файлов из одного 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; }' 
  • bash vs zsh: scoping и `typeset -g`
  • Как фильтровать glob в zsh
  • zsh хочет исправить vim для .vim
  • Измените разделитель в Zsh% _
  • Тест на существование функции, которая может работать как на bash, так и на zsh?
  • Задание zsh на пустой строке
  • Двойная проверка rm в zsh
  • Отменить завершение, но только завершение, в zsh
  • Почему urxvtc не активирует функции zsh при вызове с аргументом «-c»?
  • Как изменить среду оболочки, замеченную приложениями, запущенными на рабочем столе?
  • Двойная и тройная замена в bash и zsh
  • Interesting Posts

    Способ хранения / запоминания команд одного лайнера

    диспетчер окон при входе в текстовый режим

    Разрешить только определенный исходящий трафик на определенных интерфейсах

    Почему у RTC-устройства есть 254,0 вместо 10,135 в качестве Major, Minor numbers?

    Верните первые несколько столбцов, опустите все после него до разделителя и добавьте остальные?

    Отключить специальные функции тачпада

    Установка nginx на redhat – ошибка отсутствует libpcre.so.0

    Нужна помощь в интерпретации журналов auditd part1

    Конфигурация сети удаляется после перезагрузки Zentyal Linux Server

    Как «перекодировать» mp3-файлы

    Неизвестные сетевые подключения в nethogs (безопасно?)

    Как fork () выделяет память

    Загрузочный диск с несколькими изображениями Grub 2 загружает некоторые изображения, но перезапускается на других

    Разблокировать раздел LUKS с помощью ключевого файла без доступа root?

    Подсчет запятыми разделенных символов подряд

    Linux и Unix - лучшая ОС в мире.