小编bir*_*rac的帖子

如果行匹配"foo",则删除行,上面的行匹配"bar",下面的行匹配"baz"?

使用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)

蛮丑的.

awk sed

4
推荐指数
1
解决办法
490
查看次数

标签 统计

awk ×1

sed ×1