qq674949301
V2EX  ›  问与答

关于 sed 去掉指定行的注释问题

  •  
  •   qq674949301 · Sep 20, 2015 · 4035 views
    This topic created in 3932 days ago, the information mentioned may be changed or developed.

    想去掉注释的脚本如下:
    (代码中放大的字段就是注释行)
    PROCESS=$(ps | grep "dnsmasq" | grep -v "grep")
    if [ -z "$PROCESS" ]; then
    /opt/etc/init.d/xxxxx start
    /opt/etc/init.d/xxxx start

    /jffs/iptables rules

    exit 0
    else
        for i in `cat /var/log/server.txt`;do
                for j in `cat /jffs/opt/var/log/server.txt`;do
                        if [ $i == $j ];then
                    echo "$(date ): OK" >> /var/log/xxxx.log
                else
                    /opt/etc/init.d/xxxxxxx restart
                    /opt/etc/init.d/xxxxxxx restart
                    /opt/etc/init.d/xxxxxxx restart
    

    /jffs/iptables flush

    fi
            done
        done
    fi
    

    (代码中放大的字段就是注释行)

    我想把加注释的指定行都去掉 (注释命令前面有多个 TAB 切分),各位大侠我用 sed 该怎么写这个命令!

    14 replies    2015-09-20 17:13:41 +08:00
    lavadore
        1
    lavadore  
       Sep 20, 2015
    既然该行的内容是固定的,直接替换就行了啊
    qq674949301
        2
    qq674949301  
    OP
       Sep 20, 2015 via Android
    @lavadore 白说!有时候判断需要去掉注释运行,有时候不需要!
    lavadore
        3
    lavadore  
       Sep 20, 2015
    @qq674949301 不明白你在说什么,给个例子呗
    qq674949301
        4
    qq674949301  
    OP
       Sep 20, 2015 via Android
    @lavadore 比如我 if 判断这条命令需要执行,就得去掉注释!否则就不必执行该命令!不是简单的单一命令执行到底! TAT
    cxbig
        5
    cxbig  
       Sep 20, 2015
    请问你放大的:
    - /jffs/iptables rules
    - /jffs/iptables flush
    都是从 0 列开始的?还有操作系统是什么? Mac 、 Linux 的参数不一样
    lavadore
        6
    lavadore  
       Sep 20, 2015
    @qq674949301 很简单啊,去掉注释就直接把注释行替换为非注释行啊,有什么问题么?除非你之后还需要把该行给注释掉。

    比如直接

    sed 's/#\/jffs\/iptables rules/\/jffs\/iptables rules/g'
    qq674949301
        7
    qq674949301  
    OP
       Sep 20, 2015 via Android
    @cxbig 不是从 0 列开始的!#注释后面隔着好几个 TAB 切分!
    qq674949301
        8
    qq674949301  
    OP
       Sep 20, 2015 via Android
    @lavadore 谢谢!我试试!
    qq674949301
        9
    qq674949301  
    OP
       Sep 20, 2015 via Android
    @lavadore 这个应该是从 0 列开始替换的吧!我的注释后面隔了几个 tab
    cxbig
        10
    cxbig  
       Sep 20, 2015
    Mac 下的写法:
    sed -E 's/#(['$'\t'' ]*\/jffs\/iptables (rules|flush ))/\1/'
    qq674949301
        11
    qq674949301  
    OP
       Sep 20, 2015
    @cxbig 是在 linux 下的,刚才每一次说清楚,对不起啊!
    lavadore
        12
    lavadore  
       Sep 20, 2015
    @qq674949301 sed 替换是任何位置, tab 不影响的
    cxbig
        13
    cxbig  
       Sep 20, 2015
    @lavadore 你那一句顶着写, sed 找不出来的,要把 tab 和 space 的条件带上
    cxbig
        14
    cxbig  
       Sep 20, 2015
    @qq674949301
    sed -r 's/#(['$'\t'' ]*\/jffs\/iptables (rules|flush ))/\1/' <file>
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   905 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 21:12 · PVG 05:12 · LAX 14:12 · JFK 17:12
    ♥ Do have faith in what you're doing.