正则转换

Tem*_*ate 3 grub2 bash regex sed

我想发出一个命令来编辑/etc/default/grub并将超时从 10 更改为 2。谁能解释一下如何做到这一点?

A.B*_*.B. 6

为此,您可以使用sed,perl和其他工具。这里有两个例子为sedperl


使用sed

开始试运行

sudo sed 's/^GRUB_TIMEOUT=10$/GRUB_TIMEOUT=2/' /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

如果没问题,那么

sudo sed -i 's/^GRUB_TIMEOUT=10$/GRUB_TIMEOUT=2/' /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

来自男人sed

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)
Run Code Online (Sandbox Code Playgroud)

解释:

  • ^GRUB_TIMEOUT=10$

    正则表达式可视化
    (来源:debuggex.com

    调试器演示

    ^ - 在字符串的开头断言位置

    GRUB_TIMEOUT=10GRUB_TIMEOUT=10逐字匹配字符(区分大小写)

    $ - 在字符串末尾断言位置

  • s - s-修饰符:单行


使用perl和更通用:

开始试运行

perl -pe 's/^(GRUB_TIMEOUT=)[0-9]+$/${1}2/' /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

如果没问题,那么

sudo perl -pi -e 's/^(GRUB_TIMEOUT=)[0-9]+$/${1}2/' /etc/default/grub
Run Code Online (Sandbox Code Playgroud)