Как вставить новую строку перед шаблоном?

Как вставить новую строку перед шаблоном в строке?

Например, это вставит новую строку после шаблона регулярного выражения.

sed 's/regex/&\n/g'

Как я могу сделать то же самое, но перед шаблона?

Учитывая этот пример входного файла, шаблон для сопоставления является телефонный номер.

some text (012)345-6789

Должен стать

some text
(012)345-6789
125
задан Dennis 27 October 2019 в 22:54
поделиться

3 ответа

Некоторые из других ответов не работали на мою версию sed. Переключение положения & и \n действительно работал.

sed 's/regexp/\n&/g' 

Править: Это, кажется, не работает над OS X, если Вы не устанавливаете gnu-sed.

40
ответ дан 24 November 2019 в 00:57
поделиться

В sed Вы не можете добавить новые строки в потоке вывода легко. Необходимо использовать строку продолжения, которая является неловкой, но она работает:

$ sed 's/regexp/\
&/'

Пример:

$ echo foo | sed 's/.*/\
&/'

foo

Посмотрите здесь для деталей. Если Вы хотите что-то немного менее неловкое, Вы могли бы попытаться использовать perl -pe с группами соответствия вместо sed:

$ echo foo | perl -pe 's/(.*)/\n$1/'

foo

$1 относится к первой подобранной группе в регулярном выражении, где группы находятся в круглых скобках.

32
ответ дан 24 November 2019 в 00:57
поделиться

в sed можно сослаться на группы в шаблоне с "\1", "\2".... поэтому, если шаблоном, который Вы ищете, является "ШАБЛОН", и Вы хотите вставить, "ПРЕЖДЕ" перед ним, можно использовать без выхода

sed 's/(PATTERN)/BEFORE\1/g'

т.е.

  sed 's/\(PATTERN\)/BEFORE\1/g'
1
ответ дан 24 November 2019 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: