Faire passer xargs en premier paramètre


53

J'essaie de produire ce comportement:

grep 192.168.1 *.txt

En passant une chaîne dans grep via Xargs mais cela passe à la fin plutôt que comme 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?


Réponses:


84
$ 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.

Merci, ça marche. Mais pourquoi? Que remplacez-vous avec -I? Je ne comprends pas.
e18r

7
Il semble que les accolades sont un titulaire. Vous pouvez remplacer {} par ce que vous voulez: echo 192.168.1. | xargs -I pholder grep pholder * txt
denormalizer

3

Une autre approche:

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

Cela ne surchargera pas la longueur de la ligne de commande du shell avec trop de noms de fichiers. Pour éviter la confusion entre xargs/ grepavec des noms de fichiers qui ont des espaces, -print0et les -0options délimiteront chaque nom trouvé avec un nul plutôt qu'une LF.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.