正则表达式转换

正则表达式转换

我想要创建一条命令来编辑/etc/default/grub并将超时时间从 10 更改为 2。有人能解释一下如何做到这一点吗?

答案1

您可以使用sedperl其他工具来实现这一点。以下是sed和 的两个示例perl


使用sed

开始试运行

sudo sed 's/^GRUB_TIMEOUT=10$/GRUB_TIMEOUT=2/' /etc/default/grub

如果可以的话

sudo sed -i 's/^GRUB_TIMEOUT=10$/GRUB_TIMEOUT=2/' /etc/default/grub

来自男人sed

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

          edit files in place (makes backup if SUFFIX supplied)

解释:

  • ^GRUB_TIMEOUT=10$

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

    Debuggex 演示

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

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

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

  • s- s-修饰符:单行


使用perl更通用的:

开始试运行

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

如果可以的话

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

答案2

这是一个通用的:

sudo sed -i.bak 's/^\(GRUB_TIMEOUT=\)[0-9]\+$/\12/' /etc/default/grub

2将之后的替换\1为您想要输入的任何值。

  • s/OLD/NEW/是 的替换模式sed

  • i.bak将在原地编辑文件/etc/default/grub,同时将原始文件备份为/etc/default.grub.bak。如果您不想备份,只需使用-i

  • GRUB_TIMEOUT=我们匹配了以(将其保存在组内,以便我们以后参考)开头并以一个或多个数字([0-9]+)结尾的行。

  • 在替换部分,我们用想要放入的值替换数字,保持先前匹配的部分(用 表示\1)不变。

相关内容