【问题标题】:Using double quotes and variables in sed command [duplicate]在 sed 命令中使用双引号和变量 [重复]
【发布时间】: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 就地编辑和/或创建备份)

标签: bash sed grep


【解决方案1】:

两个变量都包含/。这让 sed 的 s 命令感到困惑。

从s/// 切换到s|||。

【讨论】:

  • 太棒了!是的,我刚刚尝试了 sed -i "s|$GREP_ENTRY|$NEW_ENTRY|g" /etc/default/grub 并且成功了
猜你喜欢
  • 2014-12-31
  • 2021-07-22
  • 2012-12-16
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多