我想用sed替换文件占位符,这个占位符就像这个$$ placeholder $$一样用变量的内容替换。
甚至可能吗?
这就是我的尝试:
sed -i "" -e 's/\$\$placeholder\$\$/$o/g' test.txt
一半工作,将$ placeholder $$替换为$ o而不是$ o变量的内容
sed -i "" -e "s/\$\$placeholder\$\$/$o/g" test.txt
在我的文字
中不匹配任何$$占位符$$先谢谢。
西里尔
答案 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之间的混乱。