Как кодировать sed для удаления нескольких строк после ключевого слова до следующей пустой строки - PullRequest
0 голосов
/ 28 сентября 2018

Может кто-нибудь посоветовать мне, как кодировать сценарий sed, который можно использовать для обновления текстового файла, следующим образом:

Каждый раз, когда встречается строка в файле, содержащая строку символов 'Header_one': -удалите строки, которые следуют непосредственно за строкой 'Header_one', пока не встретится следующая пустая строка.- но не удаляйте саму строку 'Header_one'

Так, например, файл, содержащий это:

Header_one
dkrjng
djsje

Header_two
cklrgjsj
djrhg

Header_one
drgbyj
efgjjm
cddess

Header_three
sdfvgg
ddddfy

будет изменен на:

Header_one

Header_two
cklrgjsj
djrhg

Header_one

Header_three
sdfvgg
ddddfy

Iбыл бы благодарен за любое руководство или решение.Спасибо, Джеймс.

Ответы [ 3 ]

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

Использование Perl

perl -ne ' {  print "Header_one\n" if /Header_one/ ; print if not /Header_one/../^$/ } ' 
0 голосов
/ 28 сентября 2018

Попробуйте приведенный ниже фрагмент

< InputFile sed -e '/Header_one/i Header_one' -e '/Header_one/,/s/d' > outputFile

Идея состоит в том, чтобы заменить содержимое между 2 строками и заменить его заголовком (т. Е. Header_one).Вторая часть кодов -e действительно удаляет данные между Header_one и пробелом;в то время как первая -e часть заменяет его новым заголовком Header_one.

InputFile и OutputFiles - это простые перенаправления.

Вы также можете посмотреть: https://askubuntu.com/questions/637003/delete-lines-between-2-strings

Надеюсь, это поможет:)

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

sed - это потоковый редактор, и хотя одна популярная версия sed предоставляет опцию, позволяющую редактировать файлы, я настоятельно рекомендую не использовать ее.Тем не менее, вы можете получить желаемый результат с помощью:

sed -e '/Header_one/i\
Header_one\
\
' -e '/Header_one/,/^$/d' input

Обратите внимание, что будет намного чище, если вам не нужно сохранять эту пустую строку:

sed -e '/Header_one/p' -e '/Header_one/,/^$/d' input

Также: awk '/Header_one/{printf "Header_one\n\n"; next } 1' RS= ORS='\n\n' input

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...