匹配模式跨越多行并删除那些匹配的行

时间:2011-12-26 10:53:56

标签: sed pattern-matching

我试图使用sed来执行以下操作:

在文件中看起来像:

 FirstLine
 SecondLineEEE
 AAAblablabla
 ForthLineEEE
 FifthLine
 LastLine

我想删除EEE(但保留第二行的其余部分),整行以AAA开头,保持文件的其他部分不变。

预期结果是(如图所示,如果以下行不以AAA开头,则会保留,这就是我需要匹配多行的原因。)

 FirstLine
 SecondLine
 ForthLineEEE
 FifthLine
 LastLine

我该怎么办?提前谢谢!

3 个答案:

答案 0 :(得分:2)

这可能对您有用:

echo -e "FirstLine\nSecondLineEEE\nAAAblablabla\nLastLine" |
sed '/EEE$/{N;s/EEE\nAAA.*//}'
FirstLine
SecondLine
LastLine

答案 1 :(得分:1)

fge@erwin ~ $ sed '/EEE$/d; /^AAA/d' <<EOF
> FirstLine
> SecondLineEEE
> AAAblablabla
> LastLine
> EOF
FirstLine
LastLine

/re/d将从匹配正则表达式re的输入中删除所有行。根据您的需要调整模式。

答案 2 :(得分:1)

可能这可行 -

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