使用变量时,sed替换不起作用

时间:2011-03-01 15:08:04

标签: linux bash shell sed

尝试用sed替换字符串时发生了一些奇怪的事情。这有效:

find /home/loni/config -type f -exec sed -i 's/some_pattern/replacement/g' {} \;

因此,当我手动输入字符串时,它会起作用。但在下面的情况下,不会发生更换:

find /home/loni/config -type f -exec sed -i 's/${PATTERN}/${REPLACEMENT}/g' {} \;

当我回显这两个变量PATTERN和REPLACEMENT时,它们具有正确的值。

我正在尝试用配置目录中所有文件中的替换字符串替换所有模式字符串的出现。

2 个答案:

答案 0 :(得分:21)

尝试

find /home/loni/config -type f -exec sed -i "s/${PATTERN}/${REPLACEMENT}/g" {} \;

代替。 '引号不会扩展变量。

答案 1 :(得分:3)

不确定我是否正确,但是如果你想用$ {REPLACEMENT}取代$ {PATTERN},你必须逃避美元,也许是大括号,那些是正则表达式中的保留字符:

find /home/loni/config -type f -exec sed -i -e 's/\$\{PATTERN\}/\$\{REPLACEMENT\}/g' {} \;