我正在编写一个修改 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 记住\(
...\)
引用的引号 \" 后跟任何其他字符,[^\"]*
后跟行尾$
&
将插入记住的模式