Соответствующий шаблон охватывает несколько строк и удаляет эти совпадающие строки - PullRequest
0 голосов
/ 26 декабря 2011

Я пытался использовать sed, чтобы сделать следующее:

В файле выглядит примерно так:

 FirstLine
 SecondLine<b>EEE</b>
 <b>AAA</b>blablabla
 ForthLineEEE
 FifthLine
 LastLine

Я хочу удалить EEE (но оставить оставшуюся часть второй строки) и всю строку, начиная с AAA, и сохранить другую часть файла без изменений.

Ожидаемый результат (как видно, если следующая строка не начинается с AAA, она будет сохранена, поэтому мне нужно сопоставить несколько строк.)

 FirstLine
 SecondLine
 ForthLineEEE
 FifthLine
 LastLine

Как мне это сделать? Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 26 декабря 2011

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

echo -e "FirstLine\nSecondLineEEE\nAAAblablabla\nLastLine" |
sed '/EEE$/{N;s/EEE\nAAA.*//}'
FirstLine
SecondLine
LastLine
1 голос
/ 11 января 2012

Может быть, это может сработать -

sed '/EEE$/N;s/\(.*\)EEE\nAAA.*/\1/' filename

Тест:

[jaypal:~/Temp] cat file
FirstLine
SecondLineEEE
AAAblablabla
ForthLineEEE
FifthLine
LastLine

[jaypal:~/Temp] sed '/EEE$/N;s/\(.*\)EEE\nAAA.*/\1/' file
FirstLine
SecondLine
ForthLineEEE
FifthLine
LastLine
1 голос
/ 26 декабря 2011
fge@erwin ~ $ sed '/EEE$/d; /^AAA/d' <<EOF
> FirstLine
> SecondLineEEE
> AAAblablabla
> LastLine
> EOF
FirstLine
LastLine

/re/d удалит все строки из регулярного выражения ввода re.Адаптируйте шаблоны к вашим потребностям.

...