SED 命令不能在 Debian 下的 bash 中替换,但可以在命令行中使用。
在命令行中工作:
sed -i 's|/dev/disk/by-label/SR6D4|/dev/disk/by-label/SR4D4|g' /etc/my/config.xml
不在 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
为什么在bash中使用sed时不替换文件中的字符串?
Shell 变量不会在单引号中展开。(这就是单引号的用途。)
应该工作得更好。(我添加了双引号
$file
以防您的文件名包含空格。)如前所述,您在引用时遇到问题。但是对于文件中的字符串替换有一些意见。见下文。
替换文件中的字符串是个坏主意,因为它不安全。更改时文件数据丢失的可能性很小。
您可以尝试在更改之前备份文件:
你会得到 name 的文件
file.backup
。您需要记住:如果您的文件将被损坏并且您将删除并替换它 - 文件将具有不同的 inode 并且将丢失所有硬链接。
第二种安全方法:
下一点。正如bashFAQ 认为的那样:
这就是为什么您需要使用
awk
with-v
选项。您的脚本可能如下所示: