3

我想使用 sed 用变量的内容替换像这样 $$placeholder$$ 编写的文件占位符。

甚至可能吗?

这是我尝试过的:

sed -i "" -e 's/\$\$placeholder\$\$/$o/g' test.txt

工作一半,将 $$placeholder$$ 替换为 $o 而不是 $o 变量的内容

sed -i "" -e "s/\$\$placeholder\$\$/$o/g" test.txt

不匹配我的文本中的任何 $$placeholder$$

提前谢谢。

西里尔

4

4 回答 4

1

双重逃避美元:

sed -i "s/\\$\\$placeholder\\$\\$/$o/g" test.txt

如果您的变量包含您的分隔符,您可以先对其进行一些字符串替换:

sed -i "s/\\$\\$placeholder\\$\\$/${o//\//\\/}/g" test.txt
于 2012-12-11T16:32:44.537 回答
1

您可以使用:

sed 's/\$\$placeholder\$\$/'"$o"'/g'
于 2012-12-11T16:36:55.337 回答
0

您可以在周围添加简单的引号$o

sed -i "" -e 's/\$\$placeholder\$\$/'$o'/g' test.txt
于 2012-12-11T16:28:27.143 回答
0

sed 是用于在单行上进行简单替换的好工具,但对于其他任何事情(包括在替换中使用变量)只需使用 awk:

$ cat file
foo $$placeholder$$ bar

$ o="hello
world"

$ sed 's/\$\$placeholder\$\$/'"$o"'/g' file
sed: -e expression #1, char 27: unterminated `s' command

$ awk -v o="$o" '{gsub(/\$\$placeholder\$\$/,o)}1' file
foo hello
world bar

这样,您就不必担心 sed 认为“特殊”的任何字符,或者通过仔细引用脚本的各个部分来在命令行上跳回以及在 sed 和 shell 之间搞乱。

于 2012-12-12T16:33:38.003 回答