Shell
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
在 quoutes 之後添加如下:GRUB_CMDLINE_LINUX_DEFAULT="quietipv6.disable=1" mem_sleep_default=deep
如何修改此 sed 以在 qoutes 中插入 `mem_sleep_default?
您目前在行尾與搜尋模式匹配
s/$/
。相反,您可能希望匹配尾隨雙引號,然後是 EOL
s/\"$/
(請注意,您需要使用反斜杠轉義雙引號\"
)在替換模式中,您需要將尾隨雙引號返回到行尾:
sed "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ mem_sleep_default=deep\"/" /etc/default/grub
嘗試
sed "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\(\"[^\"]*\)$/ mem_sleep_default=deep &/"
在哪裡
\(\"[^\"]*\)$/
告訴 sed 記住\(
…\)
引用的引號 " 後跟任何其他字元[^\"]*
,然後是行尾$
&
將插入記住的模式