Xargs'in ilk parametre olarak geçmesini sağlayın


53

Bu davranışı üretmeye çalışıyorum:

grep 192.168.1 *.txt

Bir dize Xargs aracılığıyla grep'e geçirilir ancak ilk parametre yerine sondan başlayarak devam eder.

echo 192.168.1 | xargs grep  *.txt

Gelen dizgiyi sonuna 'grep' ve '*' arasına koymak için xargs'a (ya da benzer bir şeye) söylemeliyim.

Bunu nasıl yaparım?


Yanıtlar:


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

Örnek

Örnek dosyalar:

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

Örnek çalışma:

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

Teşekkürler, işe yarıyor. Ama neden? -I ile değiştireceğin şey nedir? Anlamadım.
e18r

6
Kıvrımlı parantezlerin yer tutucusu olduğu anlaşılıyor. {} İle istediğiniz herhangi bir şeyi değiştirebilirsiniz: echo 192.168.1. | xargs -I Pholder Grep Pholder * .txt
denormalizer

3

Başka bir yaklaşım:

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

Bu, kabuğun komut satırı uzunluğunu çok fazla dosya adıyla taşmayacaktır. Kafa karıştırıcı önlemek için xargs/ grepdosya boşluk gibi adlandırılmış -print0ve -0bir boş yerine LF ile her bulundu adını tasvir edecek seçenekler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.