如何使用 sed 从文件中删除与模式匹配的范围内的行?

如何使用 sed 从文件中删除与模式匹配的范围内的行?

标题说明了一切。我尝试了几种语法,都失败了。也许这不可能一蹴而就……当然,搜索引擎没有帮助,手册也很难理解,info 命令也没有帮助。所有这些都缺少一个带有一系列“种类”预选的示例

答案1

最后我找到了这句杀手锏:

sed -i '1795,$ {/PaTtErN/d}' file.log 

小心使用-i旗帜并在尝试之前阅读手册

答案2

也可能AWK

bash-4.3$ cat input.txt 
line one
and another line
running out of ideas for text
Oh, look , banana !
some more lines
this is boring
But what is not boring ? text processing !
bash-4.3$ awk 'NR<4; NR>4 && $0!~/banana/' input.txt 
line one
and another line
running out of ideas for text
some more lines
this is boring
But what is not boring ? text processing !

这里的想法是打印所有少于 4 行且未发生改变的行。大于 4 且不包含特定模式(在本例中为单词“banana”)的行将被打印,而包含该模式的行显然不会被打印。

相关内容