sed удалить блок строк после pattern1 к pattern2, но не строку, соответствующую самому pattern1? - PullRequest
0 голосов
/ 28 сентября 2018

Я изо всех сил пытаюсь использовать sed для работы с 'testfile.txt', и каждый раз, когда он встречает строку, начинающуюся delete_me: abc, он затем:

  1. оставляет строку delete_me: abc нетронутой
  2. но удалите все последующие строки, пока в файле не будет достигнута следующая пустая строка.

например.Я хочу, чтобы этот ввод:

delete_me: abc
sSAsaAaSA
AsaSAsaSAsa
asASAsS

^--- <blank line>

... был изменен на следующую строку:

delete_me: abc

Я пробовал:

sed '/delete_me/ {n;d}' jil_testfile.txt
# deletes only the first line after 'delete_me'

sed '/delete_me/,/^$/d' jil_testfile.txt
# nearly works but deletes the 'delete_me' line too which I want to stay preserved.

Любые предложенияпожалуйста

1 Ответ

0 голосов
/ 28 сентября 2018

Это может работать для вас (GNU sed):

sed -n ':a;/delete_me/{p;:b;n;//ba;bb};p' file

Печатать строки как обычно до первого появления delete_me.Напечатайте эту строку и не печатайте никаких дальнейших строк, если эта строка не содержит delete_me.

Поскольку спецификация изменилась с тех пор, как я написал первое решение, вот новое:

sed -n '/delete_me/{p;:a;n;/^$/b;ba};p' file
...