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

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

  •  
  •   qq674949301 · 2015-09-20 00:49:04 +08:00 · 3362 次点击
    这是一个创建于 3357 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想去掉注释的脚本如下:
    (代码中放大的字段就是注释行)
    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 条回复    2015-09-20 17:13:41 +08:00
    lavadore
        1
    lavadore  
       2015-09-20 00:54:41 +08:00
    既然该行的内容是固定的,直接替换就行了啊
    qq674949301
        2
    qq674949301  
    OP
       2015-09-20 00:58:47 +08:00 via Android
    @lavadore 白说!有时候判断需要去掉注释运行,有时候不需要!
    lavadore
        3
    lavadore  
       2015-09-20 01:03:32 +08:00
    @qq674949301 不明白你在说什么,给个例子呗
    qq674949301
        4
    qq674949301  
    OP
       2015-09-20 01:17:58 +08:00 via Android
    @lavadore 比如我 if 判断这条命令需要执行,就得去掉注释!否则就不必执行该命令!不是简单的单一命令执行到底! TAT
    cxbig
        5
    cxbig  
       2015-09-20 01:32:27 +08:00
    请问你放大的:
    - /jffs/iptables rules
    - /jffs/iptables flush
    都是从 0 列开始的?还有操作系统是什么? Mac 、 Linux 的参数不一样
    lavadore
        6
    lavadore  
       2015-09-20 02:09:25 +08:00
    @qq674949301 很简单啊,去掉注释就直接把注释行替换为非注释行啊,有什么问题么?除非你之后还需要把该行给注释掉。

    比如直接

    sed 's/#\/jffs\/iptables rules/\/jffs\/iptables rules/g'
    qq674949301
        7
    qq674949301  
    OP
       2015-09-20 09:43:08 +08:00 via Android
    @cxbig 不是从 0 列开始的!#注释后面隔着好几个 TAB 切分!
    qq674949301
        8
    qq674949301  
    OP
       2015-09-20 09:43:30 +08:00 via Android
    @lavadore 谢谢!我试试!
    qq674949301
        9
    qq674949301  
    OP
       2015-09-20 09:45:50 +08:00 via Android
    @lavadore 这个应该是从 0 列开始替换的吧!我的注释后面隔了几个 tab
    cxbig
        10
    cxbig  
       2015-09-20 09:59:03 +08:00
    Mac 下的写法:
    sed -E 's/#(['$'\t'' ]*\/jffs\/iptables (rules|flush ))/\1/'
    qq674949301
        11
    qq674949301  
    OP
       2015-09-20 10:14:51 +08:00
    @cxbig 是在 linux 下的,刚才每一次说清楚,对不起啊!
    lavadore
        12
    lavadore  
       2015-09-20 10:49:33 +08:00
    @qq674949301 sed 替换是任何位置, tab 不影响的
    cxbig
        13
    cxbig  
       2015-09-20 17:07:47 +08:00
    @lavadore 你那一句顶着写, sed 找不出来的,要把 tab 和 space 的条件带上
    cxbig
        14
    cxbig  
       2015-09-20 17:13:41 +08:00
    @qq674949301
    sed -r 's/#(['$'\t'' ]*\/jffs\/iptables (rules|flush ))/\1/' <file>
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3638 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:30 · PVG 12:30 · LAX 20:30 · JFK 23:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.