Bash 在sed命令中使用双引号和变量
我有两个bash变量,一个叫做GREP_ENTRY,它包含一个长字符串:Bash 在sed命令中使用双引号和变量,bash,sed,grep,Bash,Sed,Grep,我有两个bash变量,一个叫做GREP_ENTRY,它包含一个长字符串: GRUB\u CMDLINE\u LINUX=“crashkernel=auto spectre\u v2=retpoline rd.lvm.lv=d6c-2b-59-93-97-ea/lv\u root rhgb安静控制台=tty0 另一个被称为新条目,它与GREP_条目完全相同,但末尾附加了fips=1: GRUB\u CMDLINE\u LINUX=“crashkernel=auto spectre\u v2=ret
GRUB\u CMDLINE\u LINUX=“crashkernel=auto spectre\u v2=retpoline rd.lvm.lv=d6c-2b-59-93-97-ea/lv\u root rhgb安静控制台=tty0
另一个被称为新条目,它与GREP_条目完全相同,但末尾附加了fips=1:
GRUB\u CMDLINE\u LINUX=“crashkernel=auto spectre\u v2=retpoline rd.lvm.lv=d6c-2b-59-93-97-ea/lv\u root rhgb安静控制台=tty0 fips=1
我试图使用sed在/etc/default/grub中查找GREP\u条目,并用新条目替换它。目前,我尝试使用双引号,如下所示:
sed-i“s/$GREP\u ENTRY/$NEW\u ENTRY/g”/etc/default/grub
但我得到了一个错误:
sed:-e表达式#1,char 123:s的未知选项
我尝试过使用双引号的其他组合,但没有用。有人能解释一下在这种情况下如何正确使用sed吗?这两个变量都包含
/
。这混淆了sed的s
命令
从
s//
切换到s | | |
太棒了!是的,我刚刚试过sed-I“s |$GREP|u ENTRY |$NEW|u ENTRY | g”/etc/default/grub,它成功了为什么不干脆sed“/^grub| u CMDLINE_LINUX=/s | ^.$$NEW u ENTRY |“/etc/default/grub
?(添加-i
或-i.bak
以就地编辑和/或创建备份)