为什么 sed 命令以交互方式工作,但不在我的脚本中?

klo*_*lor 3 command-line bash sed shell-script

SED 命令不会在 Debian 下的 bash 中替换,但可以在命令行中使用。

在命令行中工作:

sed -i 's|/dev/disk/by-label/SR6D4|/dev/disk/by-label/SR4D4|g' /etc/my/config.xml
Run Code Online (Sandbox Code Playgroud)

不在 bash 脚本中工作,不替换字符串:

from="SR6D4"
to="SR4D4"
path_from="/dev/disk/by-label/${from}"
path_to="/dev/disk/by-label/${to}"
echo "sed -i 's|${path_from}|${path_to}|g' $file"
sed -i 's|${path_from}|${path_to}|g' $file
Run Code Online (Sandbox Code Playgroud)

为什么在 bash 中使用 sed 时不替换文件中的字符串?

Ulr*_*arz 7

Shell 变量不会在单引号中展开。(这有点像单引号的用途。)

sed -i "s|${path_from}|${path_to}|g" "$file"
Run Code Online (Sandbox Code Playgroud)

应该工作得更好。(我在周围添加了双引号$file,以防您的文件名包含空格。)


归档时间:

查看次数:

16460 次

最近记录:

8 年,3 月 前