【问题标题】:How do I replace a token with the result of `pwd` in sed?如何在 sed 中用 `pwd` 的结果替换令牌?
【发布时间】:2014-12-23 20:16:46
【问题描述】:

我正在尝试做这样的事情:

sed 's/#REPLACE-WITH-PATH/'`pwd`'/'

不幸的是,我出错了:

sed: -e expression #1, char 23: unknown option to `s'

为什么会这样?

【问题讨论】:

    标签: unix sed


    【解决方案1】:

    您需要使用不同的字符而不是/,例如:

    sed 's?#REPLACE-WITH-PATH?'`pwd`'?'
    

    因为/ 出现在pwd 输出中。

    【讨论】:

    • 非常有趣,我想知道这个错误是什么意思。干得好
    【解决方案2】:

    在sed中,不能直接使用/,必须使用'/'。

      #!/bin/bash
      dir=$`pwd`/
      ls -1 | sed  "s/^/${dir//\//\\/}/g"
    

    【讨论】:

      【解决方案3】:
      sed 's:#REPLACE-WITH-PATH:'`pwd`':' config.ini
      

      问题是正确转义pwd 的输出之一。幸运的是,就像在 vim 中一样,sed 支持使用不同的分隔符。在这种情况下,使用冒号而不是斜杠作为分隔符可以避免转义问题。

      【讨论】:

        【解决方案4】:

        你可以这样做

        #!/bin/bash
        p=`pwd`
        # pass the variable p to awk
        awk -v p="$p" '$0~p{ gsub("REPLACE-WITH-PATH",p) }1' file >temp
        mv temp file
        

        或者只是 bash

        p=`pwd`
        while read line
        do
            line=${line/REPLACE-WITH-PATH/$p}
            echo $line    
        done < file > temp
        mv temp file
        

        【讨论】:

        • 我试图做一些类似的事情,这对我有帮助......我这样使用它:project_dir=${current_dir/\/f1\/f2//} 我想要 2 个文件夹的路径。
        猜你喜欢
        • 1970-01-01
        • 2020-04-02
        • 2021-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        相关资源
        最近更新 更多