【问题标题】:sed append text after matchsed 在匹配后追加文本
【发布时间】:2012-12-10 11:00:27
【问题描述】:

我正在编写一个 shell 脚本,以便能够在文件中找到匹配项后附加文本

例如,在 ~/.bash_profile 文件中的以下行

PATH=$PATH:$HOME/bin

我们需要在它后面加上 :/usr/java/jdk1.6.0_38/bin

所以会变成下面这样

PATH=$PATH:$HOME/bin:/usr/java/jdk1.6.0_38/bin

我怎么能用 sed 做到这一点?

我首先从控制台内部尝试使用以下命令,但它给了我错误,抱怨 'sed: -e expression #1, char 13: unknown option to `s''

sed '/PATH/s/$/:/usr/java/jdk1.6.0_38/bin' ~/.bash_profile

我上面的命令有什么问题?

【问题讨论】:

    标签: sed append


    【解决方案1】:

    问题是您在替换命令的替换部分中有正则表达式分隔符。要么使用\ 转义它们,要么使用不同的分隔符(在本例中为逗号):

    sed '/PATH/ s,$,:/usr/java/jdk1.6.0_38/bin,' ~/.bash_profile
    

    【讨论】:

      【解决方案2】:

      这可能对你有用(GNU sed):

      sed 's|PATH=$PATH:$HOME/bin|&:/usr/java/jdk1.6.0_38/bin|' ~/.bash_profile
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-17
        • 2013-09-30
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-13
        相关资源
        最近更新 更多