如何使用bash将 nouveau.modeset = 0 添加到以 GRUB_CMDLINE_LINUX 开头的行中
之前:
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
期望:
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet nouveau.modeset=0"
GRUB_DISABLE_RECOVERY="true"
谢谢您的帮助。
================================================ ==================
更新:
对不起,我很抱歉,但是我不知道如何让 replace_word 输出为 GRUB_CMDLINE_LINUX =“ crashkernel = auto rhgb quiet nouveau.modeset = 0” >
我的代码:
#!/bin/bash
replace_word=$(....)
sed '/GRUB_CMDLINE_LINUX=/c\'"$replace_word"'' filename
答案 0 :(得分:2)
另一种方法,没有反向引用:
$ replace_word=' nouveau.modeset=0'
$ sed '/GRUB_CMDLINE_LINUX/ s/"$/'"$replace_word"'"/' file
说明:
/GRUB_CMDLINE_LINUX/
:如果该行与GRUB_CMDLINE_LINUX
匹配s/"$/'"$replace_word"'"/'
将结尾"
替换为$replace_word
,后跟"
答案 1 :(得分:0)
假设您要替换文件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
此s
在word1
中对word2
的{{1}}至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
个位置)