Ответы:
Вы могли бы использовать awkдля этого.
command | awk '{ if (/pattern/) { print > "match" } else { print > "nomatch" } }'
>печатает весь вывод в файл, перезаписывая существующие файлы. Это не оценивается таким образом, что это приведет к тому, что любые новые строки будут перезаписывать старый вывод из того же экземпляра awk. То есть, если есть несколько совпадений, файл «совпадение» будет содержать каждое совпадение, разделенное OFS. Разница между >и >>существует в обработке существующих файлов.
Вот sedпример:
Примечание: wкоманда sed будет перезаписывать существующий файл при каждом запуске сценария, но только если эта конкретная команда записи запущена; следовательноrm
rm -f file-{yes,not}
sed -ne '/pattern/bY; w file-not' -e 'b; :Y; w file-yes' file
sed -n '/PATTERN/p;//! w file-not' infile >file-yes
Вы можете добавлять файлы в awk:
awk '{if (/pattern/) print >>"matched"; else print >>"unmatched"; }
или короче:
awk '{print >>(/pattern/?"matched":"unmatched")}'
awkно в какой момент он оценивает>? Если его оценивать каждый раз, когда применяется условное условие, вы получите два однострочных файла ...