Fai passare xargs come primo parametro


53

Sto cercando di produrre questo comportamento:

grep 192.168.1 *.txt

Passando una stringa in grep tramite Xargs ma sta andando alla fine anziché come primo parametro.

echo 192.168.1 | xargs grep  *.txt

Devo dire a xargs (o qualcosa di simile) di mettere la stringa in arrivo tra 'grep' e '*' invece che alla fine.

Come faccio a fare questo?


Risposte:


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

Esempio

File di esempio:

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

Esempio di esecuzione:

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

Grazie, funziona Ma perché? Cosa stai sostituendo con -I? Non capisco
e18r

7
Sembra che le parentesi graffe siano un segnaposto. Puoi sostituire {} con qualsiasi cosa ti piaccia: echo 192.168.1. | xargs -I pholder grep pholder * .txt
denormalizer

3

Un altro approccio:

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

Questo non sovraccaricherà la lunghezza della riga di comando della shell con troppi nomi di file. Per evitare confusione xargs/ grepcon nomi di file che hanno spazi -print0e le -0opzioni delineano ogni nome trovato con un null anziché un LF.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.