【问题标题】:use sed to replace 2 variables into one variable place along with a forward slash使用 sed 将 2 个变量与正斜杠一起替换为一个变量位置
【发布时间】:2013-05-27 13:05:09
【问题描述】:

我试图用 2 个变量之间的 / 替换 2 个变量,但它给出了 sed 表达式 -e 错误

 sed 's/'$presentnetwork'/'$netmask\/$subnet'/g' -i /etc/snmp/snmpd.conf

如何放置 / 并使用 sed 替换一个变量,即使我尝试只放置一个变量它也不起作用

 sed 's/'$presentnetwork'/'$netmask\/'/g' -i /etc/snmp/snmpd.conf

是否可以在同一个 sed 命令中使用转义序列和变量?

【问题讨论】:

    标签: regex shell unix sed


    【解决方案1】:

    你需要用双引号括起来":

    sed "s/$presentnetwork/$netmask\//g" -i /etc/snmp/snmpd.conf
    #   ^                              ^
    

    示例:

    $ cat a.html 
    hello
    $ a=hello
    $ b=good
    $ c=bye
    $ sed "s/$a/$b\/$c/g" -i a.html 
    $ cat a.html 
    good/bye
    

    【讨论】:

    • 这很好用,但是如果 $a 有一个带有 / 的内容,那么它就会失败,例如:- a=10.4.5.6/16。我们还需要在这里使用一些转义序列吗?如果是,那么如何使用它
    • 在这种情况下你必须转义/: a=10.4.5.6\/16
    • 非常感谢它的工作,我实际上将 $c 拆分为 2 像 $c 和 $d 然后我像这样使用 "s/$a\/$b/$c\/$d/g "然后它起作用了。
    • 很高兴看到这一点,@NaggappanRM :) 如果您的问题得到解答,请考虑将此或其他答案标记为已接受。它将帮助下一个进入页面的人
    【解决方案2】:

    sed 不限于/ 作为分隔符,您还可以使用其他字符使转义更容易(如果您知道该字符不能成为变量的一部分):

     sed "s_$presentnetwork_$netmask/_g" -i /etc/snmp/snmpd.conf
    

    【讨论】:

    • 好一个。在这种情况下,我更喜欢#,因为它更容易看到。
    猜你喜欢
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2014-02-19
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多