我试图找到一个命令或创建一个Linux脚本,可以执行这两个命令并列出otuput
find . -name '*bills*' -print
Run Code Online (Sandbox Code Playgroud)
这会打印所有文件
./may/batch_bills_123.log
./april/batch_bills_456.log
..
Run Code Online (Sandbox Code Playgroud)
从这个结果我想做一个grep的单词我现在手动执行此操作
grep 'put' ./may/batch_bill_123.log
Run Code Online (Sandbox Code Playgroud)
得到
sftp > put oldnet_1234.lst
Run Code Online (Sandbox Code Playgroud)
我希望得到文件名和它的匹配.
./may/batch_bills_123.log sftp > put oldnet_1234.lst
..
..
and so on...
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
BMW*_*BMW 41
您正在寻找-Hgnu grep中的选项.
find . -name '*bills*' -exec grep -H "put" {} \;
Run Code Online (Sandbox Code Playgroud)
-H, --with-filename
Print the filename for each match.
Run Code Online (Sandbox Code Playgroud)
Rei*_*ase 27
既然问题更清楚了,你可以在一个grep中做到这一点
grep -R --include "*bills*" "put" .
Run Code Online (Sandbox Code Playgroud)
带有相关标志
-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).
Run Code Online (Sandbox Code Playgroud)
或者甚至更容易
grep -R put **/*bills*
Run Code Online (Sandbox Code Playgroud)
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")
Run Code Online (Sandbox Code Playgroud)