unix – grep反转搜索与上下文

前端之家收集整理的这篇文章主要介绍了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
原文链接:https://www.f2er.com/bash/385877.html

猜你在找的Bash相关文章