sed 将字符串插入到引号内的匹配行中

sed 将字符串插入到引号内的匹配行中

我正在编写一个修改 GRUB 选项的 shell 脚本:

sed "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/$/ mem_sleep_default=deep /" /etc/default/grub

此 sed 命令匹配该行 GRUB_CMDLINE_LINUX_DEFAULT="quietipv6.disable=1"mem_sleep_default在引号后添加如下内容:

GRUB_CMDLINE_LINUX_DEFAULT="quietipv6.disable=1" mem_sleep_default=deep

我如何修改这个 sed 以在引号内插入“mem_sleep_default”?

答案1

您目前正在使用搜索模式在行尾进行匹配s/$/

相反,您可能希望匹配尾随的双引号,后跟 EOL s/\"$/(请注意,您需要使用反斜杠转义双引号\"

在替换模式中,您需要将尾随的双引号返回到行尾:

sed "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ mem_sleep_default=deep\"/" /etc/default/grub

答案2

尝试

sed "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\(\"[^\"]*\)$/ mem_sleep_default=deep &/"

在哪里

  • \(\"[^\"]*\)$/告诉 sed 记住\(...\)引用的引号 \" 后跟任何其他字符,[^\"]*后跟行尾$
  • &将插入记住的模式

相关内容