(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Bash/Linux】コマンドの実行結果をxargsで任意の場所に引数として渡す

スポンサーリンク

やりたいこと

以下のファイルがある際に

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

以上です。