假设我正在研究多个文件,有没有办法显示grep当前正在搜索哪个文件?
例如:
grep "*.log" file1 file2 file3 file4
是否可以通过grep确定当前正在搜索哪个文件,即file1,file2,file3等,并显示此输出?
谢谢!
答案 0 :(得分:1)
正如评论中所讨论的那样,grep
为此提供了选项-H
。从man
页面
-H, --with-filename
Print the file name for each match. This is the default when there is more than one file to search.
您需要做的就是在命令中添加标记为grep -H "*.log" file1 file2 file3 file4
,您可以观察grep
在每个输入文件中匹配模式的顺序。
答案 1 :(得分:0)
如果grep
未显示任何匹配项,并且您想知道它当前正在扫描哪个文件,您可能需要检查它已打开的文件句柄。这不是可移植的,但在Linux上,似乎文件描述符3将是您要检查的文件描述符,您可以使用
ls -l /proc/1234/fd/3
其中1234
是grep
进程的PID。
答案 2 :(得分:0)
你可以使用一个简单的循环和globstar来运行所有文件并回显名称然后grep你的模式。
for file in **
do
echo "searching $file"
grep "$pattern" "$file"
done
这将显示结果:
searching file1
LINE_WITH_PATTERN
searching file2
searching file3
LINE2_WITH_PATTERN
如果您只想搜索特定文件...
for file in file1 file2 file3 file4
答案 3 :(得分:-1)
使用--with-filename
肯定是将结果与包含结果的文件相关联的更简单方法,但如果您真的想查看当前正在搜索的文件grep
,您可以简单地在循环中调用它:
for f in file1 file2 file3 file4; do
echo "Searching $f"
grep "*.log" "$f"
done
这将在搜索开始之前打印文件名。