加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix – grep反转搜索与上下文

发布时间:2020-12-15 18:38:45 所属栏目:安全 来源:网络整理
导读:我想在文件中的匹配行之前和之后过滤掉几行. 这将删除我不想要的行: $grep -v "line that i don't want" 这将打印出我不想要的行之前和之后的2行: $grep -C 2 "line that i don't want" 但是当我结合它们时,它不会过滤掉我不需要的行之前和之后的两行: #
我想在文件中的匹配行之前和之后过滤掉几行.

这将删除我不想要的行:

$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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读