Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用变量时Sed替换不起作用_Linux_Bash_Shell_Sed - Fatal编程技术网

Linux 使用变量时Sed替换不起作用

Linux 使用变量时Sed替换不起作用,linux,bash,shell,sed,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' {} \; 当我回显这两个变量模式和替换时,它们的值

尝试用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' {} \;
当我回显这两个变量模式和替换时,它们的值是正确的

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

尝试

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

相反。'引号不展开变量。

不确定我是否正确,但如果您想用${REPLACEMENT}替换${PATTERN},您必须转义美元,可能还有大括号,这些是正则表达式中的保留字符:

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

谢谢上面的解决方案,在bash命令子语句中如何
echo$(sed“s/local/$HOME/”/etc/hosts)
不起作用。gman:那是因为$HOME通常包含斜杠,所以在替换之后,整个命令变成
echo$(sed“s/local//HOME/erich/”/etc/hosts)
,这不会像预期的那样起作用。-这对我有用。使用双引号(“)而不是单引号(”)。