Учитывая этот входной файл:
$ cat file
1
2
foo
bar
3
etc
4
5
С любым awk:
$ awk '{printf "%s%s", (/^[0-9]/ ? ors: ""), $0; ors=ORS} END{print ""}' file
1
2foobar
3etc
4
5
С GNU sed для -z
для чтения всего файла в виде одной строки, -E
для включения ERE и принятия \n
в качестве новой строки в регулярном выражении:
$ sed -Ez 's/\n([^0-9])/\1/g' file
1
2foobar
3etc
4
5
Обратите внимание, что решение awk, в дополнение к переносимой работе с любым awk в любой оболочке на любом компьютере UNIX, одновременно считывает / сохраняет только одну строку ввода и поэтому будет работать эффективно и надежно для произвольно больших файлов (в отличие от решение sed, которое считывает весь файл в память и, таким образом, YMMV для больших файлов).