使用sed和/或awk,我希望只有当它包含字符串"foo"时才能删除一行,并且前后的行分别包含字符串"bar"和"baz".
所以对于这个输入:
blah
blah
foo
blah
bar
foo
baz
blah
Run Code Online (Sandbox Code Playgroud)
我们会删除第二个foo,但没有别的,留下:
blah
blah
foo
blah
bar
baz
blah
Run Code Online (Sandbox Code Playgroud)
我尝试使用while循环逐行读取文件,但这很慢,我无法弄清楚如何匹配上一行和下一行.
编辑 - 根据评论中的要求,这是我的while循环的当前状态.目前只匹配前一行(从前一个循环存储为$ linepre).
linepre=0
while read line
do
if [ $line != foo ] && [ $linepre != bar ]
then
echo $line
fi
linepre=$line
done < foobarbaz.txt
Run Code Online (Sandbox Code Playgroud)
蛮丑的.