如何让 xargs 与 stdin 配合良好?

如何让 xargs 与 stdin 配合良好?
$ seq 1 3
1
2
3
$ seq 1 3 | xargs echo
1 2 3
$

seq 1 3在心里用任何在标准输出上列出每行一个条目的命令替换。我怎样才能或多或少地得到你所期望的东西,即单独行(echo 1; echo 2; echo 3;)上的条目?

答案1

通常xargs会在一个命令行上放置多个参数。要将其一次限制为一个参数,请使用以下-n选项:

$ seq 3 | xargs -n 1 echo
1
2
3

文档

man xargs

-n 最大参数
每个命令行最多使用 max-args 个参数。如果超出大小(请参阅 -s 选项),则将使用少于 max-args 的参数,除非给出 -x 选项,在这种情况下 xargs 将退出。

-n和之间的区别-L

-L类似,但有一个额外的功能:与 不同的是-n,带有尾随空白的行将继续到下一行。观察:

$ echo $'1 \n2\n3\n4'
1 
2
3
4
$ echo $'1 \n2\n3\n4' | xargs -L 1 echo
1 2
3
4
$ echo $'1 \n2\n3\n4' | xargs -n 1 echo
1
2
3
4

答案2

更多的研究揭示了答案让 xargs 对每行输入执行一次命令:

$ seq 1 3 | xargs -L 1 echo
1
2
3

相关内容