首页 > 解决方案 > 用于删除与模式匹配的行以及不同缩进后的后续行的 Shell 脚本

问题描述

我的haxproxy配置如下:

frontend bocluster
    bind <VIRTUAL IP>:8680
    mode tcp
    default_backend boservers
backend boservers
    balance roundrobin
    server boserver1 <HMASTER PRIVATE IP>:8780 check
    server boserver2 <HSECMASTER PRIVATE IP>:8780 check

我必须删除从匹配模式开始的行和下一个后续行,直到以不同缩进开始的行,例如:如果我选择模式为frontend bocluster,脚本必须删除此模式及其下的下三行。

标签: shellperlawksed

解决方案


这个单线应该有帮助:(傻瓜)

awk -v p="YOURLINE" '$0~"^"p{d=1;next}d&&/^\S/{d=0}!d' file
  • 用你想要的模式替换YOURLINE
  • 这个单行将删除整个数据“块”,而不是限制在模式之后的固定行。(在您的示例中,它是三行)。

小测试:

kent$  cat f
foo
        a
        b
        c
        d
bar
        x
        y
        z
blah
        some
        thing
        here

kent$  awk -v p="foo" '$0~"^"p{d=1;next}d&&/^\S/{d=0}!d' f
bar
        x
        y
        z
blah
        some
        thing
        here

kent$  awk -v p="bar" '$0~"^"p{d=1;next}d&&/^\S/{d=0}!d' f
foo
        a
        b
        c
        d
blah
        some
        thing
        here

推荐阅读