Bash:如何在最后一个单词的特定行添加字符串
如何使用bash将nouveau.modeset=0添加到以GRUB\u CMDLINE\u LINUX开始的行中 之前:Bash:如何在最后一个单词的特定行添加字符串,bash,sed,Bash,Sed,如何使用bash将nouveau.modeset=0添加到以GRUB\u CMDLINE\u 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="
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"
谢谢你的帮助
=================================================================
更新:
很抱歉我的鲁莽,但我不知道如何让替换\u word输出为GRUB\u CMDLINE\u LINUX=“crashkernel=auto-rhgb quiet-nouveau.modeset=0”
我的代码:
#!/bin/bash
replace_word=$(....)
sed '/GRUB_CMDLINE_LINUX=/c\'"$replace_word"'' filename
假设您要替换file
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
中的文件
,对g
进行了全局更改
word1
在我们的示例中是GRUB\u CMDLINE\u LINUX=\”(.*)\“
,这意味着捕获与GRUB\u CMDLINE\u LINUX=
匹配的行,以及引用的内容,括号组匹配,您可以稍后参考。因此,我们匹配该行的引用部分。为什么?将其与要添加的新文本一起粘贴。在我们的示例中,word2
就是这个意思word2
是GRUB\u CMDLINE\u LINUX=\“\1$replace\u word\”
\1
表示word1
中第一个括号的内容,因此它是前一个字符串,然后您会看到一个空格和要添加的变量。请注意,我只使用双引号,因为简单引号强制bash
逐字解释字符串$replace\u word
,而不是对其求值
请注意,这会输出到
STD:ERR
。如果要保存新文件,可以将输出重定向到另一个文件,将其重定向到同一个文件将销毁该文件。如果要将其保存到同一文件,请使用sed-i
(i
n位置)假设要替换文件文件中的字符串。您可以使用以下选项:
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
中的文件
,对g
进行了全局更改
word1
在我们的示例中是GRUB\u CMDLINE\u LINUX=\”(.*)\“
,这意味着捕获与GRUB\u CMDLINE\u LINUX=
匹配的行,以及引用的内容,括号组匹配,您可以稍后参考。因此,我们匹配该行的引用部分。为什么?将其与要添加的新文本一起粘贴。在我们的示例中,word2
就是这个意思word2
是GRUB\u CMDLINE\u LINUX=\“\1$replace\u word\”
\1
表示word1
中第一个括号的内容,因此它是前一个字符串,然后您会看到一个空格和要添加的变量。请注意,我只使用双引号,因为简单引号强制bash
逐字解释字符串$replace\u word
,而不是对其求值
请注意,这会输出到STD:ERR
。如果要保存新文件,可以将输出重定向到另一个文件,将其重定向到同一个文件将销毁该文件。如果要将其保存到同一文件中,请使用另一种方法,无需反向引用:
$ replace_word=' nouveau.modeset=0'
$ sed '/GRUB_CMDLINE_LINUX/ s/"$/'"$replace_word"'"/' file
解释:
/GRUB\u CMDLINE\u LINUX/
:如果行匹配GRUB\u CMDLINE\u LINUX
s/“$/”“$replace\u word”“/”
用$replace\u word
的值替换结尾”
另一种方法,无需反向参考:
$ replace_word=' nouveau.modeset=0'
$ sed '/GRUB_CMDLINE_LINUX/ s/"$/'"$replace_word"'"/' file
解释:
/GRUB\u CMDLINE\u LINUX/
:如果行匹配GRUB\u CMDLINE\u LINUX
s/“$/”“$replace\u word”“/”
用$replace\u word
的值替换结尾”
您尝试过什么?如果你告诉我们你被困在哪里,我们很乐意帮助你。我不是最悲观的选民tho@mrbolichi更新我的代码,谢谢。你尝试了什么?如果你告诉我们你被困在哪里,我们很乐意帮助你。我不是最悲观的选民tho@mrbolichi更新我的代码,谢谢。亲爱的@SLePort,谢谢你的帮助亲爱的@SLePort,谢谢你的帮助亲爱的@mrbolichi,谢谢你的帮助亲爱的@mrbolichi,谢谢你的帮助