如何为匹配 grep 正则表达式的每行过滤出 2 行?
这是我的最小测试:
SomeTestAAAA
EndTest
SomeTestABCD
EndTest
SomeTestDEFG
EndTest
SomeTestAABC
EndTest
SomeTestACDF
EndTest
显然我尝试过,例如,grep -vA 1 SomeTestAA
这不起作用。
期望的输出是:
SomeTestABCD
EndTest
SomeTestDEFG
EndTest
SomeTestACDF
EndTest
答案1
您可以grep
与-P
(PCRE) 一起使用:
grep -P -A 1 'SomeTest(?!AA)' file.txt
(?!AA)
是零宽度负先行模式,确保没有AA
after SomeTest
。
测试 :
$ grep -P -A 1 'SomeTest(?!AA)' file.txt
SomeTestABCD
EndTest
SomeTestDEFG
EndTest
SomeTestACDF
EndTest
答案2
您可以使用 GNUsed
的d
命令删除一行,并在其前面添加前缀以/pat/,+N
选择与模式匹配的行以及后续的行氮线。就你而言,氮= 1 因为您只想删除匹配行之后的单个后续行:
sed -e '/SomeTestAAAA/,+1d'
答案3
尝试使用下面的 GNUsed
命令,效果很好
命令
sed '/SomeTestAA/,+1d' filename
输出
SomeTestABCD
EndTest
SomeTestDEFG
EndTest
SomeTestACDF
EndTest
答案4
一种选择是使用p
erlc
兼容的r
egular e
xpression grep
:
pcregrep -Mv 'SomeTestAA.*\n' file
该选项-M
允许模式匹配多于一行。