gpt4 book ai didi

linux - 覆盖/boot/grub/menu.lst?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:48 24 4
gpt4 key购买 nike

在覆盖之前,我已经将/boot/grub/menu.lst 复制到/home/san。我在/home/san/menu.lst 上运行 sed 只是为了测试。

如何覆盖

default 0

default 1

在 sed 的帮助下。我使用了以下命令,但都没有用。这很可能是因为我不知道“默认”和“0”之间有多少空格。我以为有两个空格和一个制表符,但我错了。

sed -e 's/default  \t0/default  \t1/' /home/san/menu.lst
sed -e 's/default\t0/default\t1/' /home/san/menu.lst
sed -e 's/default \t0/default \t1/' /home/san/menu.lst
sed -e 's/default 0/default 1/' /home/san/menu.lst

我实际上想写一个脚本,可以查看 menu.lst 中是否写了“默认 0”,然后将其替换为“默认 1”,如果写了“默认 1”,则将其替换为“默认 2”。

谢谢

更新:

如何使用条件语句查看以'default'开头的行后面是否写有“0”或“1”?如果“0”替换为“1”,如果“1”替换为“0”?

最佳答案

这对我有用(当然还有另一个文件;)

sed -re 's/^default([ \t]+)0$/default\11/' /home/san/menu.lst

工作原理:

  1. -r 传递给 sed允许我们使用扩展的正则表达式,因此无需转义括号和加号。
  2. [\t]+ 以任何顺序匹配一个或多个制表符或空格。
  3. 用括号括起来,即 ([\t]+),将其变成一个,我们可以引用它。
  4. 这是本例中唯一的组,因此 \1。这就是替换字符串中发生的情况。
  5. 我们不想将 default 0 替换为更大字符串的一部分。因此,我们使用 ^$,它们分别匹配行的开始和结束。

注意:

  1. 使用组并不是绝对必要的。您还可以选择用单个制表符或空格替换所有这些制表符和空格。在这种情况下,只需省略括号并将 \1 替换为空格:

    sed -re 's/^default[ \t]+0$/default 1/' /home/san/menu.lst
  2. 如果 default 0 后有尾随空格,这将失败。如果这是一个问题,那么您可以在 EOL 之前匹配 [\t]*(零个或多个制表符和空格):

    sed -re 's/^default([ \t]+)0[ \t]*$/default\11/' /home/san/menu.lst

关于linux - 覆盖/boot/grub/menu.lst?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1778231/

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