如何用sed中的`pwd`结果替换令牌?

时间:2009-07-27 02:31:57

标签: unix sed

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

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

不幸的是,我错了:

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

为什么会这样?

4 个答案:

答案 0 :(得分:20)

您需要使用其他字符而不是/,例如:

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

因为/输出中显示pwd

答案 1 :(得分:2)

在sed中,您无法直接使用/,必须使用' /'。

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

答案 2 :(得分:1)

sed 's:#REPLACE-WITH-PATH:'`pwd`':' config.ini

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

答案 3 :(得分:1)

而不是像这样引用,你可以像这样做

#!/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