Предположим, что вы хотите заменить строку в файле file
.Вы можете использовать следующее:
sed -E "s/GRUB_CMDLINE_LINUX=\"(.*)\"/GRUB_CMDLINE_LINUX=\"\1 $replace_word\"/g" file
при условии, что вы ранее сделали
replace_word="nouveau.modeset=0"
Как это работает?Вы можете увидеть структуру моего sed
предложения как
sed "s/word1/word2/g" file
this s
ubstutites word1
до word2
в file
, изменения, сделанные g
в целом.
word1
в нашем примере это GRUB_CMDLINE_LINUX=\"(.*)\"
, что означает захват строк, которые соответствуют GRUB_CMDLINE_LINUX=
и что-то в кавычках. Группа скобок соответствует тому, к которому вы можете обратиться позже.Таким образом, мы сопоставляем указанную часть строки.Зачем?вставить его вместе с новым текстом, который вы хотите добавить.Вот что означает word2
в нашем примере.word2
равно GRUB_CMDLINE_LINUX=\"\1 $replace_word\"
.\1
означает содержимое первых скобок в word1
, поэтому это предыдущая строка, затем вы видите пробел и переменную, которую вы хотите добавить.Обратите внимание, что я использую только двойные кавычки, потому что простые кавычки заставляют bash
буквально интерпретировать строку $replace_word
вместо ее оценки.
Обратите внимание, что это приводит к STD:ERR
.Если вы хотите сохранить новый файл, вы можете перенаправить вывод в другой файл , перенаправление его в тот же файл уничтожит его.Если вы хотите сохранить это в тот же файл, используйте sed -i
(i
n место)