Основная проблема здесь заключается в том, что sed решает, что представляет собой строку (шаблон, с которым он работает), перед выполнением каких-либо команд. То есть, если у вас есть только один шаблон (one two three
), он не будет интерпретироваться как несколько строк после выполнения s/ /\n/g
. Если бы все еще был один шаблон, хотя это был бы тот, который содержал внутри него новые строки.
Самый простой обходной путь, позволяющий перераспределить шаблоны sed по вновь вставленным символам новой строки, - просто запустить sed дважды, как вы сделали.
Другим обходным решением было бы добавить что-то вроде опции m
(многострочный буфер) к команде s
:
$ echo one two three | sed 's/ /\n/g;s/^/:/mg'
:one
:two
:three