Using double quotes and variables in sed command
我有两个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进行就地编辑和/或创建备份)
-
请看一下:当有人回答我的问题时该怎么办?
两个变量都包含/。这混淆了sed的s命令。
从s///切换到s|||。
- 惊人的!是的,我刚尝试使用sed -i" s | $ GREP_ENTRY | $ NEW_ENTRY | g" / etc / default / grub并成功