Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在sed命令中使用双引号和变量_Bash_Sed_Grep - Fatal编程技术网

Bash 在sed命令中使用双引号和变量

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

我有两个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=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
以就地编辑和/或创建备份)