我正在尝试使用 awk 搜索特定字符串的多个文件,但它返回
'Example' is a directory: skipped.
Run Code Online (Sandbox Code Playgroud)
如何使用 awk 搜索所有子目录和文件?
用法示例,
awk -F: '$3 ~ /example/' * > C:/out.txt
Run Code Online (Sandbox Code Playgroud)
这是 shell globbing 的问题,而不是awk
. 为了递归地进行 glob,您需要启用 bashglobstar
选项。
shopt -s globstar
Run Code Online (Sandbox Code Playgroud)
环球之星
如果设置,路径名扩展上下文中使用的模式 ** 将匹配所有文件以及零个或多个目录和子目录。如果模式后跟 /,则仅目录和子目录匹配。
那么你将能够:
awk -F: '$3 ~ /example/' ** > C:/out.txt
Run Code Online (Sandbox Code Playgroud)
请注意,您仍然会收到有关目录本身被跳过的错误,但它也会递归到其中。您可以通过将 stderr 重定向到 /dev/null 来隐藏错误
awk -F: '$3 ~ /example/' ** > C:/out.txt 2>/dev/null
Run Code Online (Sandbox Code Playgroud)