Используйте sed / grep / awk, чтобы удалить все до первой пустой строки - PullRequest
4 голосов
/ 13 февраля 2012

Может кто-нибудь помочь мне разобраться, как это сделать, было бы очень признательно.

пример

block of            //delete
non-important text  //delete

important text      //keep
more important text //keep

Ответы [ 4 ]

10 голосов
/ 13 февраля 2012
sed '1,/^$/d' file

или

awk '!$0{f=1;next}f{print}' file

Выход

$ sed '1,/^$/d' <<< $'block of\nnon-important text\n\nimportant text\nmore important text'
important text
more important text

$ awk '!$0{f=1;next}f{print}' <<< $'block of\nnon-important text\n\nimportant text\nmore important text'
important text
more important text
5 голосов
/ 13 февраля 2012

Если пустая строка пуста, это будет сделано:

sed '1,/^$/d' filename
0 голосов
/ 13 февраля 2012

Другой вариант с grep (работает со строками)

grep -v PATTERN filename > newfilename

Например:

имя файла имеет следующие строки:

this is not implicated but important text
this is not important text
this is important text he says
not important text he says
not this it is more important text

Фильтр:

grep -v "not imp" filename > newfilename

создаст имя нового файла со следующими 3 строками:

this is not implicated but important text
this is important text he says
not this it is more important text

Вам нужно будет выбрать ШАБЛОН, который будет уникально идентифицировать строки, которые вы пытаетесь удалить.Если вы используете ШАБЛОН "important text", он будет соответствовать всем строкам, в то время как "not imp" соответствует только строкам со словами "not imp".Используйте egrep (или grep -E) для фильтров регулярных выражений, если вы хотите больше гибкости в сопоставлении с образцом.

0 голосов
/ 13 февраля 2012

с awk:

awk "BEGIN { x = 0 } /^$/ { x = 1} { if (x == 2) { print } ; if (x == 1) { x = 2 } }" filename
...