xargsを最初の引数として渡すように設定

xargsを最初の引数として渡すように設定

私はこの動作を生成しようとしています。

grep 192.168.1 *.txt

Xargsを介して文字列をgrepに渡しますが、最初の引数ではなく最後に渡します。

echo 192.168.1 | xargs grep  *.txt

着信文字列を末尾ではなく「grep」と「*」の間に入れるには、xargs(または同様のもの)に指示する必要があります。

どうすればいいですか?

答え1

$ echo 192.168.1. | xargs -I{} grep {} *.txt

はい

サンプルファイル:

$ cat {1..3}.txt
192.168.1
192.168.1
192.168.1

例を実行してください:

# example uses {} but you can use whatever, such as -I{} or -Ifoo
$ echo 192.168.1. | xargs -I{} grep {} *.txt
1.txt:192.168.1.
2.txt:192.168.1.
3.txt:192.168.1.

答え2

別の方法:

find . -name \*.txt -print0 | xargs -0 grep 192.168.1

ファイル名が多すぎても、シェルのコマンドラインの長さはオーバーフローしません。スペースを含むファイル名との混同を避けるために、オプションは、見つかった各名前xargsを説明するためにLFの代わりにnullを使用します。grep-print0-0

関連情報