【问题标题】:sed ignore line starting with regexsed 忽略以正则表达式开头的行
【发布时间】:2012-03-20 11:26:57
【问题描述】:

我正在尝试在 shell 脚本中使用 sed 替换属性文件上的属性;下面列出的命令可以正常工作

sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile

问题 - 这家伙也替换了 cmets 中匹配的“KEY”。

示例文件:

###########
#ws.clients=http://abc123.com
ws.clients=http://123.com
###########

脚本:

#!/bin/ksh
KEY="ws.clients"
NEWVAL="http://abcd.com"
sed "s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile

输出:

###########
#ws.clients=http://abcd.com
ws.clients=http://abcd.com
###########

我尝试了几种方法,但未能成功转义以“#”开头的行...建议?

【问题讨论】:

    标签: sed


    【解决方案1】:

    您可以在替换表达式中添加条件:

    sed "/^[^#]/ s!${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile
    

    /^[^#]/ 读作“所有内容在行首有一个井号”。

    【讨论】:

      【解决方案2】:

      你可以这样做

      sed "s!^${KEY}=.*!${KEY}=${NEWVAL}!" infile > outfile
      

      刚刚添加了^,这样只有从行首开始的匹配。上面的 ans 也应该可以工作,但是如果您的行以 space 开头,那也会有同样的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-01
        • 1970-01-01
        • 2016-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多