39. sed 命令行参数


我们已经讨论过这个选项,并且在很多例子中都使用过它。 sed 选项 -n 抑制作为标准 sed 流程一部分发生的默认打印。

您还可以使用 --quiet--silent 代替 -n。 它们的功能相同。

以下所有命令都是相同的:

sed -n 'p' employee.txt
sed --quiet 'p' employee.txt
sed --silent 'p' employee.txt

您还可以将多个 sed 命令组合在一个文件中,并使用 -f 选项调用 sed 脚本文件。 我们之前已经演示过这一点。 您还可以使用 --file

以下所有命令都是相同的:

sed -n -f test-script.sed /etc/passwd
sed -n --file=test-script.sed /etc/passwd

使用 -e 从命令行执行 sed 命令脚本。 您可以从命令行使用多个 -e 选项。 您还可以使用 --expression

以下所有命令都是相同的:

sed -n -e '/root/ p' /etc/passwd
sed -n --expression '/root/ p' /etc/passwd

正如我们已经讨论过的,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

这应该与 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

指定行长度。这需要与 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