xargsがstdinとうまく動作するようにする方法は?

xargsがstdinとうまく動作するようにする方法は?
$ seq 1 3
1
2
3
$ seq 1 3 | xargs echo
1 2 3
$

seq 1 3標準出力から1行に1つの項目を一覧表示するコマンドを精神的に置き換えます。予期したもの(例:echo 1; echo 2; echo 3;別の行()の項目)をより多くまたは少なくするにはどうすればよいですか?

答え1

xargsコマンドラインに複数の引数が配置されることがよくあります。一度に1つのパラメータに制限するには、次の-nオプションを使用します。

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

文書

からman xargs

-n最大パラメータ
コマンドラインごとに最大 max-args 個の引数を使用します。サイズを超えると(-sオプションを参照)、-xオプションが指定されていない限り、max-argsよりも少ない引数が使用されます。この場合、xargsは終了します。

-n間の違い-L

-L同様ですが、1つの追加機能があります。とは異なり、-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が各入力行に対してコマンドを1回実行するようにします。:

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

関連情報