Можно использовать awk как это:
$ awk ' /^$/ { print; } /./ { printf("%s ", $0); } ' test
Или если Вам нужна дополнительная новая строка в конце:
$ awk ' /^$/ { print; } /./ { printf("%s ", $0); } END { print ""; } ' test
Или если Вы хотите разделить абзацы новой строкой:
$ awk ' /^$/ { print "\n"; } /./ { printf("%s ", $0); } END { print ""; } ' test
Эти команды awk используют действия, которые охраняют шаблоны:
/regex/
или
END
Следующее действие только выполняется, если шаблон соответствует текущей строке.
И ^$.
символы имеют особое значение в регулярных выражениях, где ^
соответствует началу строки, $
конец и .
произвольный символ.
Это - zsh, так действительно существует спецификатор шарика для этого.
echo *([1,42]) # The first 42 files in the current directory, in lexicographic order
echo **/*([1,42]) # The first 42 files in a depth-first traversal
echo **/*(od[1,42]) # The first 42 files in a breadth-first traversal
Другие спецификаторы, которые могли бы быть полезными, например, следующее выражение, включают точечные файлы (D
), ограничивает регулярными файлами (.
) и символьные ссылки (-
) в регулярные файлы, и расширяется до пустого списка, если там не идет ни в какое сравнение (N
):
echo *(-.DN[1,42])