我想使用 sed 用变量的内容替换像这样 $$placeholder$$ 编写的文件占位符。
甚至可能吗?
这是我尝试过的:
sed -i "" -e 's/\$\$placeholder\$\$/$o/g' test.txt
工作一半,将 $$placeholder$$ 替换为 $o 而不是 $o 变量的内容
sed -i "" -e "s/\$\$placeholder\$\$/$o/g" test.txt
不匹配我的文本中的任何 $$placeholder$$
提前谢谢。
西里尔
双重逃避美元:
sed -i "s/\\$\\$placeholder\\$\\$/$o/g" test.txt
如果您的变量包含您的分隔符,您可以先对其进行一些字符串替换:
sed -i "s/\\$\\$placeholder\\$\\$/${o//\//\\/}/g" test.txt
您可以使用:
sed 's/\$\$placeholder\$\$/'"$o"'/g'
您可以在周围添加简单的引号$o:
sed -i "" -e 's/\$\$placeholder\$\$/'$o'/g' test.txt
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 之间搞乱。