V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qq674949301
V2EX  ›  问与答

关于 sed 去掉注释

  •  
  •   qq674949301 · 2015-12-08 17:06:10 +08:00 · 3729 次点击
    这是一个创建于 3270 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #!/bin/sh
    
    PRE1=udp --dport 53 -j REDIRECT --to-ports 5556
    PRE2=tcp --dport 53 -j DNAT --to-destination $DNS:53
            #iptables -t nat -I PREROUTING -p $PRE1
            #iptables -t nat -I PREROUTING -p $PRE2
    

    我写以下命令

    sed -r 's/#(['$'\t'' ]*iptables -t nat -I PREROUTING -p ($PRE1|$PRE2)/\1/' patch

    但是不管用,没有去掉注释,应该是 PRE 前面加了$变量的原因,如果不加可以去掉注释!
    请问各位该如何修改这个命令去实现!

    8 条回复    2015-12-08 18:48:57 +08:00
    Earthman
        1
    Earthman  
       2015-12-08 17:58:39 +08:00
    好久没写 sed/awk 了,提个思路,忽略第一行,忽略每行开头的空白[[:space:]],删掉#开头的就行
    sualwu
        2
    sualwu  
       2015-12-08 18:06:17 +08:00
    ➜ ~ cat a.sh
    #!/bin/sh

    PRE1=udp --dport 53 -j REDIRECT --to-ports 5556
    PRE2=tcp --dport 53 -j DNAT --to-destination $DNS:53
    #iptables -t nat -I PREROUTING -p $PRE1
    #iptables -t nat -I PREROUTING -p $PRE2
    ➜ ~ sed -r 's/^\s+#//g' a.sh
    #!/bin/sh

    PRE1=udp --dport 53 -j REDIRECT --to-ports 5556
    PRE2=tcp --dport 53 -j DNAT --to-destination $DNS:53
    iptables -t nat -I PREROUTING -p $PRE1
    iptables -t nat -I PREROUTING -p $PRE2
    sualwu
        3
    sualwu  
       2015-12-08 18:10:19 +08:00
    去掉#后的:
    ➜ ~ sed -r 's/^(\s.*)(#.*)/\1/g' a.sh
    #!/bin/sh

    PRE1=udp --dport 53 -j REDIRECT --to-ports 5556
    PRE2=tcp --dport 53 -j DNAT --to-destination $DNS:53
    qq674949301
        4
    qq674949301  
    OP
       2015-12-08 18:18:10 +08:00
    @sualwu 有很多 iptables 规则!这只是部分我想去掉注释的!如果这样就全部去掉注释了!
    qq674949301
        5
    qq674949301  
    OP
       2015-12-08 18:19:35 +08:00
    @sualwu 非常感谢您的回答!只是去掉注释#而不是去掉注释行!能不能再原命令上修改一下呢?
    sualwu
        6
    sualwu  
       2015-12-08 18:27:53 +08:00
    ➜ ~ sed -r 's/^(\s.*#)(iptables -t nat -I PREROUTING -p \$PRE[0-9])/\2/g' a.sh
    #!/bin/sh

    PRE1=udp --dport 53 -j REDIRECT --to-ports 5556
    PRE2=tcp --dport 53 -j DNAT --to-destination $DNS:53
    iptables -t nat -I PREROUTING -p $PRE1
    iptables -t nat -I PREROUTING -p $PRE2
    uuspider
        7
    uuspider  
       2015-12-08 18:37:44 +08:00
    sed 's/#\(iptables -t nat -I PREROUTING -p $PRE\)/\1/'
    qq674949301
        8
    qq674949301  
    OP
       2015-12-08 18:48:57 +08:00
    @sualwu @uuspider 非常感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3135 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:20 · PVG 22:20 · LAX 06:20 · JFK 09:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.