GNU/Linux >> Tutoriels Linux >  >> Linux

Impression du nom de fichier avec les résultats de Grep dans Find -exec ?

J'ai un programme appelé foo que je veux exécuter sur chaque résultat trouvé via find. Donc quelque chose comme ça :

find . -name '*.o' -type f -exec foo {} ;

Je veux grep la sortie de toutes ces invocations de foo pour une certaine barre de cordes. Alors j'ajoute ceci :

find . -name '*.o' -type f -exec foo {} ; | grep bar

Mais je perds les informations d'origine sur les fichiers d'où proviennent les correspondances. J'ai essayé d'ajouter -fprintf /dev/stderr '%pn' au find mais il semble maintenant que stdout a disparu, car aucun résultat grep n'est imprimé.

Comment puis-je obtenir chaque nom de fichier imprimé sur la sortie et ENSUITE avoir les résultats grep correspondant à ce fichier imprimés après ?

Alternativement, s'il y avait un moyen de faire le -H argument de grep travail qui irait bien aussi, mais tel qu'il est écrit, cela ne fonctionnera pas parce que je ne fais que passer du texte de stdin et grep ne connaît pas le nom du fichier. J'ai essayé diverses incantations de xargs , mais je n'ai rien pu faire fonctionner non plus.

Réponse acceptée :

Pour obtenir chaque nom de fichier imprimé sur la sortie et ALORS avoir les résultats grep correspondant à ce fichier imprimés après, vous pouvez envelopper le -exec foo {} | grep pipe dans un shell :

find . -name '*.o' -type f -print -exec sh -c 'foo "$1" | grep "bar"' sh {} ;

Pour faire le -H l'argument de grep fonctionne avec l'entrée standard, si votre version de grep prend en charge le --label= option que vous pourriez faire

find . -name '*.o' -type f -exec sh -c '
  foo "$1" | grep -H --label="$1" "bar"
' sh {} ;

ou (si votre trouvaille supporte le + alternative multi-arguments à ; ):

find . -name '*.o' -type f -exec sh -c '
  for f; do foo "$f" | grep -H --label="$f" "bar"; done
' sh {} +

Linux
  1. Grep avec des opérateurs logiques ?

  2. Omettre l'extension avec Find ?

  3. Rechercher -exec + Vs Rechercher | Xargs :lequel choisir ?

  4. Capturer des groupes avec Awk ou Grep ?

  5. Le nom de fichier ne s'imprime pas correctement avec le trait de soulignement _ dans Bash

3 conseils pour imprimer avec Linux

Commande Grep sous Linux (Rechercher du texte dans des fichiers)

Comment trouver une chaîne dans un fichier sous Linux

Retrouver les fichiers perdus avec Scalpel

Rechercher du texte dans des fichiers sous Linux à l'aide de grep

Commande Grep sous Linux (avec exemples)