Linux find en grep commando samen

Ik probeer een commando te vinden of een Linux-script te maken dat deze twee commando’s kan uitvoeren en de otuput kan weergeven

find . -name '*bills*' -print

hiermee worden alle bestanden afgedrukt

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

van dit resultaat wil ik een grep doen voor een woord. Ik doe dit nu handmatig

grep 'put' ./may/batch_bill_123.log 

en ontvang

sftp > put oldnet_1234.lst

Ik hoop de bestandsnaam en de overeenkomst te krijgen.

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

enig idee?


Antwoord 1, autoriteit 100%

U zoekt de optie -Hin gnu grep.

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

Hier is de uitleg

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

Antwoord 2, autoriteit 54%

Nu de vraag duidelijker is, kun je dit in één keer doen grep

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

Met relevante vlaggen

  -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).

Antwoord 3, Autoriteit 6%

of misschien nog gemakkelijker

grep -R put **/*bills*

De **GLOB SYNTAX betekent “elke diepte van de directories”. Het werkt in Zsh, en ik denk ook dat recente versies van bash ook.


Antwoord 4

grep -l "$SEARCH_TEXT" $(find "$SEARCH_DIR" -name "$TARGET_FILE_NAME")

Other episodes