我想要创建一条命令来编辑/etc/default/grub
并将超时时间从 10 更改为 2。有人能解释一下如何做到这一点吗?
答案1
您可以使用sed
和perl
其他工具来实现这一点。以下是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)^
- 断言字符串开头的位置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
^(GRUB_TIMEOUT=)[0-9]+$
(来源:debuggex.com)
答案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
)不变。