unix – grep反转搜索与上下文

我想在文件中的匹配行之前和之后过滤掉几行.

这将删除我不想要的行:

$grep -v "line that i don't want"

这将打印出我不想要的行之前和之后的2行:

$grep -C 2 "line that i don't want"

但是当我结合它们时,它不会过滤掉我不需要的行之前和之后的两行:

# does not remove 2 lines before and after the line I don't want:
$grep -v -C 2 "line that i don't want"

如何过滤掉不只是我不想要的行,而且还要前后的行?我猜这个sed会比这更好

编辑:我知道这可以在几行awk / Perl / Python / Ruby / etc中完成,但是我想知道是否有一个简洁的单行我可以从命令行运行.

试试这个:
sed 'h;:b;$b;N;N;/PATTERN/{N;d};$b;P;D' inputfile

您可以在模式之前更改N个命令的数量,以影响要删除的行数.

您可以以编程方式构建一个包含N个命令数的字符串:

C=2 # corresponds to grep -C
N=N
for ((i = 0; i < C - 1; i++)); do N=$N";N"; done
sed "h;:b;\$b;$N;/PATTERN/{N;d};\$b;P;D" inputfile

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...