С учетом ввода:
#Hello my name is Chris
next line of random txt 1
#Hello my name is Bob
next line of random txt 2
Hello Ana is my name #
next line of random txt 3
Another Line
Либо скрипт:
sed -e '/#/ { /Chris/b' -e '/Ana/b' -e 'N; d; }' data
или сценарий:
sed -E \
-e '/#/ {
/(Chris|Ana)/b
N
d
}' \
data
генерирует:
#Hello my name is Chris
next line of random txt 1
Hello Ana is my name #
next line of random txt 3
Another Line
Кажется, это соответствует вашей спецификации. Первый даже не использует синтаксис расширенного регулярного выражения (ERE), поэтому он максимально переносим, но второй показывает, что его можно легко изменить для использования синтаксиса ERE. В BSD sed
после команды ветвления (b
) нельзя ставить точку с запятой; то, что следует, должно идти в другой строке или в другом аргументе -e
. b
без явной метки означает «переход к концу сценария».