我无法理解下面的命令。我知道这个参数的-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 手册 ]更多细节。