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


53

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

grep 192.168.1 *.txt

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

echo 192.168.1 | xargs grep  *.txt

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

どうすればいいですか?


回答:


83
$ 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.

おかげで、うまくいきました。しかし、なぜ?何を-Iに置き換えますか?わかりません。
e18r

6
中括弧はプレースホルダーのようです。{}を好きなものに置き換えることができます:echo 192.168.1。| xargsの-I pholderグレップpholder * .TXT
denormalizer

3

別のアプローチ:

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.