Bash:如何在最后一个单词的特定行添加字符串

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="

如何使用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="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,谢谢你的帮助