Shell

sed 將字元串插入到引號內的匹配行中

  • June 12, 2019

我正在編寫一個修改 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 記住\(\)引用的引號 " 後跟任何其他字元[^\"]*,然後是行尾$
  • &將插入記住的模式

引用自:https://serverfault.com/questions/971061