【发布时间】:2020-07-01 01:29:03
【问题描述】:
我有两个 bash 变量,一个叫 GREP_ENTRY,它包含一个长字符串:
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=d6c-2b-59-93-97-ea/lv_root rhgb quiet console=tty0
另一个叫做 NEW_ENTRY,它与 GREP_ENTRY 完全相同,但在末尾附加了 fips=1:
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=d6c-2b-59-93-97-ea/lv_root rhgb quiet console=tty0 fips=1
我正在尝试使用 sed 在 /etc/default/grub 中查找 GREP_ENTRY 并将其替换为 NEW_ENTRY。目前,我正在尝试使用如下双引号:
sed -i "s/$GREP_ENTRY/$NEW_ENTRY/g" /etc/default/grub
但我得到了错误:
sed: -e expression #1, char 123: unknown option to `s'
我尝试过使用其他双引号组合,但无济于事。有人能解释一下我在这种情况下如何正确使用 sed 吗?
【问题讨论】:
-
为什么不只是
sed "/^GRUB_CMDLINE_LINUX=/s|^.*$|$NEW_ENTRY|" /etc/default/grub? (添加-i或-i.bak就地编辑和/或创建备份)