39. sed 命令行参数
-n
参数
我们已经讨论过这个选项,并且在很多例子中都使用过它。 sed 选项 -n
抑制作为标准 sed 流程一部分发生的默认打印。
您还可以使用 --quiet
或 --silent
代替 -n
。 它们的功能相同。
以下所有命令都是相同的:
sed -n 'p' employee.txt
sed --quiet 'p' employee.txt
sed --silent 'p' employee.txt
-f
参数
您还可以将多个 sed 命令组合在一个文件中,并使用 -f
选项调用 sed 脚本文件。
我们之前已经演示过这一点。 您还可以使用 --file
。
以下所有命令都是相同的:
sed -n -f test-script.sed /etc/passwd
sed -n --file=test-script.sed /etc/passwd
-e
参数
使用 -e
从命令行执行 sed 命令脚本。 您可以从命令行使用多个 -e
选项。 您还可以使用 --expression
。
以下所有命令都是相同的:
sed -n -e '/root/ p' /etc/passwd
sed -n --expression '/root/ p' /etc/passwd
-i
参数
正如我们已经讨论过的,sed 不会触及输入文件。
它始终打印到标准输出,或者您可以使用 w
命令将输出写入不同的文件。 我们还展示了 sed 如何使用 -i
选项直接修改输入文件。
将原始 employee.txt
文件中的 John
替换为 ````Johnny``` :
sed -i 's/John/Johnny/' employee.txt
执行相同的命令,但通过向 -i
传递扩展名来进行备份。
sed -ibak 's/John/Johnny/' employee.txt
您还可以使用 –-in-place
代替 -i
。
以下两个命令是相同的:
sed -ibak 's/John/Johnny/' employee.txt
sed --in-place=bak 's/John/Johnny/' employee.txt
-c
参数
这应该与 sed 选项 -i
结合使用。
sed 选项 -i
通常使用临时文件来创建更改,并在操作完成时将其重命名为原始输入文件。 这可能会导致文件所有权发生更改。
当您将 -c
与 -i
一起使用时,输入文件所有权不会更改。 您还可以使用 --copy
。
以下两个命令是相同的:
sed -ibak -c 's/John/Johnny/' employee.txt
sed --in-place=bak --copy 's/John/Johnny/' employee.txt
-l
参数
指定行长度。这需要与 sed l
命令结合使用。 您在 -l
选项中指定的值将用作行大小。 您还可以使用 --line-length
。
以下所有命令都是相同的。
sed -n -l 20 'l' employee.txt
sed -n --line-length=20 employee.txt
请注意,您也可以在不指定 -n
选项的情况下获得相同的输出,如下所示。
sed -n 'l 20' employee.txt --posix option