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