web-dev-qa-db-fra.com

Faire passer xargs comme premier paramètre

J'essaie de produire ce comportement:

grep 192.168.1 *.txt

En passant une chaîne dans grep via Xargs mais cela se passe à la fin plutôt qu'en tant que premier paramètre.

echo 192.168.1 | xargs grep  *.txt

J'ai besoin de dire à xargs (ou quelque chose de similaire) de mettre la chaîne entrante entre 'grep' et '*' au lieu de la fin.

Comment puis-je faire cela?

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

Exemple

Exemples de fichiers:

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

Exemple d'exécution:

$ 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

Une autre approche:

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

Cela ne dépassera pas la longueur de la ligne de commande du shell avec trop de noms de fichiers. Pour éviter de confondre xargs/grep avec des noms de fichier comportant des espaces, -print0 et -0 les options délimiteront chaque nom trouvé avec un null plutôt qu'un LF.

3
Bill Hoag