Linux find and grep command together
I am trying to find a command or create a Linux script that can do this two comands and list the otuput
find . -name '*bills*' -print
this prints all the files
./may/batch_bills_123.log
./april/batch_bills_456.log
..
from this result I want to do a grep for a word I do this manually right now
grep 'put' ./may/batch_bill_123.log
and get
sftp > put oldnet_1234.lst
I would hope to get the file name and its match.
./may/batch_bills_123.log sftp > put oldnet_1234.lst
..
..
and so on...
any ideas?
You are looking for -H
option in gnu grep.
find . -name '*bills*' -exec grep -H "put" {} \;
Here is the explanation
-H, --with-filename
Print the filename for each match.
Now that the question is clearer, you can just do this in one grep
grep -R --include "*bills*" "put" .
With relevant flags
-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).
Or maybe even easier
grep -R put **/*bills*
The **
glob syntax means "any depth of directories". It will work in Zsh, and I think recent versions of Bash too.
grep -l "$SEARCH_TEXT" $(find "$SEARCH_DIR" -name "$TARGET_FILE_NAME")