gpt4 book ai didi

linux - 通过 bash 脚本将大页添加到 grub.conf 中的默认引导选项

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:19 25 4
gpt4 key购买 nike

我想通过 bash 脚本将大页添加到 grub.conf 文件中。我可以使用这个命令

sed -i '0,/quiet\+/s//\0\ transparent_hugepage=never hugepages=23/' /boot/grub/grub.conf

但是,这每次都会添加到启动选项 0。我想检查默认启动选项(default=n)是什么并将其添加到第 n 个启动选项。

例如:grub.conf

default=1
title CentOS (3.12.8)
...
kernel ........ quiet

title CentOS (2.6.3)
....
kernel ........ quiet

这里我想在安静之后为 CentOS (2.6.3) 添加大页面,因为它是默认的,但是

sed -i '0,/quiet\+/s//\0\ transparent_hugepage=never hugepages=23/' /boot/grub/grub.conf 

将其添加到 CentOS (3.12.8)

有什么建议吗?

谢谢

最佳答案

我怀疑如果您喜欢真正神秘的编程挑战,只需一个 sed 命令就可以实现这一点。否则,您可以使用两个 sed 命令执行如下操作:

INPUT=/boot/grub/grub.conf
POSITION=`sed -n -e '/^default=\(.*\)/\1/p' "$INPUT"`
POSITION=$(( $POSITION + 1)) # Because 'default' is 0-based
REPLACE="transparent_hugepage=never hugepages=23"
sed \
'/^kernel /{x;s/$/Z/;/^Z\{'$POSITION'\}$/{x;s/ quiet/ quiet '$REPLACE'/p;d};x}'\
-i "$INPUT"

说明

第一个 sed 命令提取默认位置,这是从零开始的,所以我们需要加 1。

第二个 sed 命令相当复杂:

  • 每次找到以“kernel”开头的行时,都会将“Z”字符附加到保留空间 - 即 {x;s/$/Z/;
  • 因此,保留空间中的 Z 字符数用于检测何时到达需要编辑的条目 - 即 ^/Z\{'$POSITION'\}$/ - 如果 $POSITION 为 2,则变为 ^/Z\{2\}$/ (请注意 $POSITION 的替换是由 shell 执行的)
  • 检测到此情况时,切换回来,执行您需要执行的实际正则表达式替换,然后删除保留空间 - 即 {x;s/Quiet/Quiet «extra text»/p;d}
  • 上述之所以有效,是因为 sed 命令 s 始终在模式空间中运行
  • 最后,切换回模式空间并继续 - 即 ;x}

注意空格和引号等。

关于linux - 通过 bash 脚本将大页添加到 grub.conf 中的默认引导选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22873530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com