sed
уже работает построчно:
sed -E '/AF|PO/{...sed expression to apply when matching... }' server
Например, выводить только те строки, которые соответствуют этому регулярному выражению.:
sed -nE '/AF|PO/p' server
Флаг -E
для sed
заставляет утилиту интерпретировать регулярное выражение как расширенное регулярное выражение, а -n
отключает неявный вывод каждой входной строки.
Чтобы выполнить несколько действий со строками, соответствующими выражению, заключите их в {... }
. Например, печатать каждую совпадающую строку дважды (и не печатать не совпадающие -строки ):
sed -nE '/AF|OP/{p;p;}' server
sed
не для этого. Вы можете использовать собственные возможности оболочки, делая все «строка -на -строка».
sed имеет возможности адресации строк, если это вам поможет:
$ seq 5 > input
$ sed '3s/.*/jeff/' input
1
2
jeff
4
5
$ sed '3,5s/.*/new/' input
1
2
new
new
new
Вместо использования цикла оболочки для обработки текстового файла рассмотрите инструмент, который более естественно обрабатывает текст, например awk:
$ cat input
AF bar
PO baz
other stuff
more other stuff
$ awk '/(AF)|PO/ { print }' input
AF bar
PO baz
$ awk '/stuff/ && !/more/ { print }' input
other stuff