我想在文件中的匹配行之前和之后过滤掉几行.
这将删除我不想要的行:
$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