我试图使用 awk 在多个文件中搜索特定字符串,但它返回
'Example' is a directory: skipped.
如何使用 awk 搜索所有子目录和文件?
使用示例,
awk -F: '$3 ~ /example/' * > C:/out.txt
答案1
这是 shell 通配符的问题,而不是awk
.为了递归地进行 glob,您需要启用 bashglobstar
选项。
shopt -s globstar
环球星
如果设置,路径名扩展上下文中使用的模式 ** 将匹配所有文件以及零个或多个目录和子目录。如果模式后跟 /,则仅目录和子目录匹配。
那么你就能够:
awk -F: '$3 ~ /example/' ** > C:/out.txt
请注意,您仍然会收到有关目录本身被跳过的错误,但它也会递归到该目录中。您可以通过将 stderr 重定向到 /dev/null 来隐藏错误
awk -F: '$3 ~ /example/' ** > C:/out.txt 2>/dev/null
答案2
我建议您find
结合使用awk
:
find -type f -exec awk -F: '$3 ~ /example/' {} > c:/out.txt \;
笔记: find
不是 的简单替代品*
,正如下面的评论中正确指出的那样。您可能需要调整find
参数以便准确返回您正在查找的文件集。
笔记:仍然需要一个>
(与 相对>>
),因为它是find
的输出被重定向。
笔记:如果你正在使用cmder
,你应该小心调用 GNU find 而不是 Windows 的 findfind.exe
。看这里寻找克服这种歧义的方法。