На самом деле есть очень удобный способ справиться с этим сценарием в обычном sed
: поменять местами новую строку с каким-нибудь обычным символом, скажем, _, затем выполнить [^_] и затем вернуться назад. Я хотел опубликовать решение возникшей проблемы, но был слишком ленив, чтобы опубликовать его, но теперь позвольте мне разместить его здесь:
sed -e '
/./!b
:loop
$q; N
/\n$/bloop
h
/\ncreate table/!{
s/\(.*\)\n.*/\1/p
g;s/.*\(\n\)/\1/;D
}
g
y/\n_/_\n/
s/^[^_]*/test/
y/\n_/_\n/
' input.data