Вы правы, этот или подобные вопросы задавались здесь бесчисленное количество раз. Как далеко
sed '/abstract.*{/ {:L; /}/{d; b;}; N; bL; }' file
понял? После сопоставления abstract
он -if necassry -повторяется до тех пор, пока не будет найден }
.
РЕДАКТИРОВАТЬ:Разрешение измененного запроса:
sed '/abstract.*{/ {:L; /},$/{d; b;}; N; bL; }' file
С GNU sed
и несколькими строками ввода:
sed -n '/pattern/{h;s//replacement/;};p;${g;//!q1;}' file
pattern
:$
):pattern
, выйдите с кодом выхода1
//
используют последний использованный шаблон регулярного выражения Альтернатива –awk
:
awk 'END{exit !repl} /pattern/{repl++; sub(/pattern/,"replacement")} 1' file
pattern
, переменная repl
увеличивается и производится замена logical not
переменной (, если repl
равно нулю, выйти со статусом1
)Альтернатива – grep
ввод заранее, например.:
if grep -q 'pattern' file; then
# input contains pattern - do sed replacement
sed 's/pattern/replacement/' file
else
: input does not contain pattern - execute shell script
fi