web-dev-qa-db-ja.com

xargsを最初のパラメーターとして渡す

私はこの行動を生み出そうとしています:

grep 192.168.1 *.txt

Xargsを介してgrepに文字列を渡すことにより、最初のパラメーターとしてではなく最後に文字列を渡します。

echo 192.168.1 | xargs grep  *.txt

着信文字列を末尾ではなく「grep」と「*」の間に置くようにxargs(または類似の何か)に指示する必要があります。

どうすればよいですか?

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

サンプルファイル:

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

実行例:

$ echo 192.168.1. | xargs -I{} grep {} *.txt
1.txt:192.168.1.
2.txt:192.168.1.
3.txt:192.168.1.
95
slm

別のアプローチ:

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

これにより、ファイル名が多すぎても、シェルのコマンドラインの長さがオーバーフローすることはありません。 xargs/grepとスペースを含むファイル名を混同しないようにするには、-print0および-0オプションは、見つかった各名前をLFではなくnullで示します。

3
Bill Hoag