sed 问题:“s/quiet init=.*$//”是什么意思?

sed 问题:“s/quiet init=.*$//”是什么意思?

我无法理解下面的命令。我知道这个参数的-i意思是“插入”,最后一个参数显然引用了要更改的文件,但有人可以解释第二个参数 -s/ quiet init=.*$//

sed -i 's/ quiet init=.*$//' /boot/cmdline.txt

该文件/boot/cmdline.txt如下所示:

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet  init=/usr/lib/raspi-config/init_resize.sh

答案1

-i对于 GNU 来说,sed实际上意味着就地修改文件,而不是“插入”

其余的是 sed 脚本s,意味着我们将进行替换,然后第一个/标记正则表达式的开始,直到下一个/,所以在这种情况下,模式quiet init=.*$将找到字符串quiet init=以及从那里到行尾的所有内容。下一部分是替换匹配表达式的内容,在我们的例子中它是一个空字符串,因此我们有效地删除了该行的该部分

答案2

您似乎将 sed 命令行选项与 sed 命令本身混淆了。

选项修改 的默认行为,sed并且 sed 命令确定您希望对 执行的操作sed

-i在您的情况下是就地编辑,这意味着将更改永久写入有问题的文件,因此您正在更改文件

不要将其与i用于在所需位置插入行的命令混淆。例如

sed -i '1,i\header' file # i inside single quotes is command

将该行添加header到文件的第一行。

在你的情况下s是替换命令,其一般格式是

s/pattern/substition/flag

[ sed 手册 ]更多细节。

相关内容