web-dev-qa-db-fra.com

Commande Linux find et grep ensemble

J'essaie de trouver une commande ou de créer un script Linux qui peut faire ces deux commandes et répertorier l'otuput

find . -name '*bills*' -print

cela imprime tous les fichiers

./may/batch_bills_123.log
./april/batch_bills_456.log
..

à partir de ce résultat, je veux faire un grep pour un mot que je fais manuellement maintenant

grep 'put' ./may/batch_bill_123.log 

et obtenir

sftp > put oldnet_1234.lst

J'espère obtenir le nom du fichier et sa correspondance.

./may/batch_bills_123.log   sftp > put oldnet_1234.lst
..
..
and so on... 

des idées?

25
user3307574

Tu recherches -H option dans gnu grep.

find . -name '*bills*' -exec grep -H "put" {} \;

Voici l'explication

    -H, --with-filename
      Print the filename for each match.
40
BMW

Maintenant que la question est plus claire, vous pouvez simplement le faire en un seul grep

grep -R --include "*bills*" "put" .

Avec des drapeaux pertinents

   -R, -r, --recursive
          Read  all  files  under  each  directory,  recursively;  this is
          equivalent to the -d recurse option.
   --include=GLOB
          Search only files whose base name matches GLOB  (using  wildcard
          matching as described under --exclude).
26
BroSlow