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?


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.

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.