Я пишу сценарий оболочки, который изменяет параметры GRUB:
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 в кавычки?
пытаться
sed "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\(\"[^\"]*\)$/ mem_sleep_default=deep &/"
где
\(\"[^\"]*\)$/
скажи sed запомнить \(
... \)
цитируемая цитата \ ", за которой следует любой другой символ [^\"]*
за которым следует конец строки $
&
вставит запомненный образецВы в настоящее время соответствуете в конце строки шаблону поиска s/$/
.
Вместо этого вы можете захотеть сопоставить завершающую двойную кавычку, за которой следует EOL с s/\"$/
(Обратите внимание, что вам нужно экранировать двойную кавычку обратной косой чертой \"
)
В шаблоне подстановки вам нужно будет вернуть эту завершающую двойную кавычку в конец строки:
sed "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ mem_sleep_default=deep\"/" /etc/default/grub