Как вставить новую строку перед шаблоном в строке?
Например, это вставит новую строку после шаблона регулярного выражения.
sed 's/regex/&\n/g'
Как я могу сделать то же самое, но перед шаблона?
Учитывая этот пример входного файла, шаблон для сопоставления является телефонный номер.
some text (012)345-6789
Должен стать
some text
(012)345-6789
Некоторые из других ответов не работали на мою версию sed. Переключение положения &
и \n
действительно работал.
sed 's/regexp/\n&/g'
Править: Это, кажется, не работает над OS X, если Вы не устанавливаете gnu-sed
.
В sed Вы не можете добавить новые строки в потоке вывода легко. Необходимо использовать строку продолжения, которая является неловкой, но она работает:
$ sed 's/regexp/\
&/'
Пример:
$ echo foo | sed 's/.*/\
&/'
foo
Посмотрите здесь для деталей. Если Вы хотите что-то немного менее неловкое, Вы могли бы попытаться использовать perl -pe
с группами соответствия вместо sed:
$ echo foo | perl -pe 's/(.*)/\n$1/'
foo
$1
относится к первой подобранной группе в регулярном выражении, где группы находятся в круглых скобках.
в sed можно сослаться на группы в шаблоне с "\1", "\2".... поэтому, если шаблоном, который Вы ищете, является "ШАБЛОН", и Вы хотите вставить, "ПРЕЖДЕ" перед ним, можно использовать без выхода
sed 's/(PATTERN)/BEFORE\1/g'
т.е.
sed 's/\(PATTERN\)/BEFORE\1/g'