我正在尝试编写一个脚本,该脚本将检查/boot/grub/grub.conf中以“kernel”开头的每一行的内容,如果该行中不包含“nousb”,则将其添加到末尾。
默认情况下,我的grub.conf有两行内核,我的脚本将第一次工作,并在两行的末尾应用“nousb”。但是,为了测试这样一个场景:我从第一行删除nousb,并将其保留在第二行,我的脚本将认为它应用于两行,而不是将它重新应用于缺少的第一行。这是我有的

grep -w 'nousb' /boot/grub/grub.conf || sudo sed -i '/^\s*kernel/ s/$/ nousb/' /boot/grub/grub.conf

我希望它将'nousb'添加到以内核开头的任何缺少它的行中,不管已经有多少行。有什么想法吗?
为了展示,上面的脚本将向文件中的两行添加nousb,如下所示:
kernel word1 word2
kernel word3 word4

但不是这个:
kernel word1 word2
kernel word3 word4 nousb

最佳答案

使用GNU sed:

sed '/\bkernel\b/{/\bnousb\b/b;s/$/ nousb/}' file

\b:标记单词边界
b:从分支到脚本结尾
$:标记行尾

关于linux - 检查多行并将字符串添加到末尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40642484/

10-12 02:58