やりたいこと
以下のファイルがある際に
cat hoge.txt 1 2 3
cat hoge.txt | xargs echo a b
のようにすることで例えば真ん中である
a 1 b a 2 b a 3 b
と出力させる。
環境情報
- GNU bash, version 4.4.12 release (x86_64-unknown-cygwin)
やり方
replace-strオプションを利用することで想定通りの出力とできる。
$ cat hoge.txt | xargs -I % echo a % b
a 1 b a 2 b a 3 b
また、以下のようにすることで引数として出す場所を操作できる。
$ cat hoge.txt | xargs -I % echo % a b
$ cat hoge.txt | xargs -I % echo a b %
以下、補足です。
補足
以下オプションを利用することで自分が指定した箇所にパイプで受けた結果を出すことができます。
-I replace-str Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.
一点注意が必要なのは前段の結果に制御文字が入っている場合で以下のようなファイルだと
$ file fuga.txt userlist_ori.json: ASCII text, with CRLF line terminators
環境によっては場所がずれますがそれは制御文字側の問題となります。
$ head fuga.txt | xargs -I % echo a % b b1 b2 b3
以上です。