Jadikan xargs pass sebagai parameter pertama

53

Saya mencoba menghasilkan perilaku ini:

grep 192.168.1 *.txt

Dengan mengirimkan string ke grep melalui Xargs tetapi sedang berjalan di akhir alih-alih sebagai parameter pertama.

echo 192.168.1 | xargs grep  *.txt

Saya perlu memberi tahu xargs (atau yang serupa) untuk meletakkan string yang masuk antara 'grep' dan '*' alih-alih di akhir.

Bagaimana saya melakukan ini?

andy boot
sumber

Jawaban:

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

Contoh

File sampel:

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

Contoh dijalankan:

$ echo 192.168.1. | xargs -I{} grep {} *.txt
1.txt:192.168.1.
2.txt:192.168.1.
3.txt:192.168.1.
slm
sumber
Terima kasih, ini berhasil. Tapi kenapa? Apa yang kamu ganti dengan -I? Saya tidak mengerti.
e18r
6
Tampaknya kurung keriting adalah dudukan. Anda dapat mengganti {} dengan apa pun yang Anda suka: echo 192.168.1. | xargs -Saya pholder grep pholder * .txt
denormalizer
3

Pendekatan lain:

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

Ini tidak akan membanjiri panjang baris perintah shell dengan terlalu banyak nama file. Untuk menghindari kebingungan xargs/ grepdengan nama file yang memiliki spasi, -print0dan -0opsi akan menggambarkan setiap nama yang ditemukan dengan null daripada LF.

Bill Hoag
sumber