2015-01-23 3 views
3

У меня есть выход как:добавить символ новой строки после определенных строк с SED

A: this thing 
B: that thing 
A: 23 
B: 46 
A: negative 
B: positive 

, которые я создаю, используя патч в/AWK. Как я могу использовать СЭД (я имею в виду СЭД является правильный выбор?), Чтобы добавить новую строку после каждой B: линии, чтобы получить:

A: this thing 
B: that thing 

A: 23 
B: 46 

A: negative 
B: positive 

ответ

2
sed '/^B:/a\ 
    ' file 

Команда a добавляет следующее после соответствующей строки.

Вы также можете сделать что-то вроде 's/^B:.*/&\n/', отредактировать строку и добавить новую строку.

Он также прост в обращении в awk.

+0

Спасибо. Я думаю, что мне нравится метод '' s/^ B:. */& \ N/'', но можете ли вы немного объяснить это мне? Я получаю, что '^ B:' соответствует строкам, начинающимся с 'B:', и предположим, что '. *' Является подстановочным знаком, но что такое '' '' '? Разве это просто говорит «все, о чем мы просили в первой части»? – drjrm3

+0

Да. '. *' Соответствует остальной части строки (поэтому она является частью совпадающего шаблона в '&'), так что новая строка идет в конце строки, а не в середине. –

2

Использование AWK вы можете сделать:

awk '{print} /^B:/{print ""}' file 
A: this thing 
B: that thing 

A: 23 
B: 46 

A: negative 
B: positive 
1

Один из способов использования sed ...

sed 's/^\(B:.*\)/\1\n/' 

Или, как @JonathanLeffler прокомментировал ниже:

sed 's/^B:.*/&\n/' 
+2

Или, проще, 's/^ B:. */& \ N /' без явного захвата. –

1

Попробуйте что-то вроде этого:

sed -E -i 's:(^B.*$):\1\n:g' filename 

Он добавляет новую строку в каждый которая начинается с буквы B в filename.

+1

Или, проще, 's/^ B:. */& \ N /' без явного захвата. –

2

GNU sed Использование (Append трюма (пустой по умолчанию) для шаблона, используя G вариант):

sed '/^B:/G' file 
A: this thing 
B: that thing 

A: 23 
B: 46 

A: negative 
B: positive 
+1

Мне это нравится! Умная. –

0

Вот еще awk

awk '/^B:/ {$0=$0"\n"} 1' file 
A: this thing 
B: that thing 

A: 23 
B: 46 

A: negative 
B: positive 
Смежные вопросы