it-swarm.com.de

Lassen Sie xargs als ersten Parameter übergeben

Ich versuche dieses Verhalten zu erzeugen:

grep 192.168.1 *.txt

Durch Übergeben eines Strings an grep über Xargs wird dieser jedoch am Ende anstatt als erster Parameter angezeigt.

echo 192.168.1 | xargs grep  *.txt

Ich muss xargs (oder etwas Ähnlichem) anweisen, die eingehende Zeichenfolge zwischen 'grep' und '*' anstatt am Ende zu setzen.

Wie mache ich das?

60
andy boot
$ echo 192.168.1. | xargs -I{} grep {} *.txt

Beispiel

Beispieldateien:

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

Beispiellauf:

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

Ein anderer Ansatz:

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

Dadurch wird die Befehlszeilenlänge der Shell nicht mit zu vielen Dateinamen überfüllt. Um zu vermeiden, dass xargs/grep mit Dateinamen mit Leerzeichen verwechselt wird, -print0 und -0 Optionen beschreiben jeden gefundenen Namen mit einer Null anstelle einer LF.

3
Bill Hoag