Еще один sed, использующий малоизвестный трюм:
$ sed -ne '/[^^]$/{H;d}; {H;g;s/\n/ /g;p;s/.*//;h}' test.txt;
^1^0^this is test file line1^
^2^1^this is test file line2^
^3^1^this is test file line3^
^4^1^this is file line4^
В основном: если текущая строка ( пробел ) не заканчивается на ^, добавьте ее в пробел и переходите к следующей строке. В противном случае снова добавьте текущую строку в пространство удержания, затем замените текущее пространство шаблона на пространство удержания, обработайте строки, добавленные на H
, и напечатайте результат. Затем освободите пространство удержания при подготовке к следующей последовательности строк (к сожалению, кажется, что сделать этот последний бит за один шаг не так-то просто)
Примечания:
- Это будет иметь проблемы, если последняя строка ввода не заканчивается на ^.
- При использовании GNU sed замените
s/.*//
на z
.