用sed搜索并替换$标志

时间:2012-12-11 16:20:05

标签: bash unix sed replace

我想用sed替换文件占位符,这个占位符就像这个$$ placeholder $$一样用变量的内容替换。

甚至可能吗?

这就是我的尝试:

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

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

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

在我的文字

中不匹配任何$$占位符$$

先谢谢。

西里尔

4 个答案:

答案 0 :(得分:1)

双重逃避美元:

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

如果你的变量包含你的分隔符,你可以先在它上面做一些字符串替换:

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

答案 1 :(得分:1)

您可以使用:

sed 's/\$\$placeholder\$\$/'"$o"'/g'

答案 2 :(得分:0)

您可以在$o附近添加简单引号:

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

答案 3 :(得分: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之间的混乱。