grep 只返回目录路径

grep 只返回目录路径

我正在使用 grep 搜索一个大目录,我遇到的问题是我只需要满足正则表达式的目录。我不需要文件名。

我正在使用的 grep 命令是。

grep -Erin "RegEx" * > outputfile.txt

答案1

根据@RalfFriedl所说,如果您只想要与正则表达式匹配的文件所在的目录名称,则可以使用 dirname。如果该目录中有多个文件,您可以使用 sort 将输出折叠到排序的唯一列表。像下面这样:

dirname $(grep -Eril "RegEx" *) | sort -u

答案2

Grep 没有这个选项。

如果您不需要文件名,为什么要使用-n行号选项?

有一个选项可以列出匹配的文件名:

-l, --files-with-matches
禁止正常输出;相反,打印通常会打印输出的每个输入文件的名称。扫描将在第一个匹配处停止。

您可以使用sed删除文件名的最后部分,只保留目录部分。如果您只想列出每个目录一次,则可以通过 运行输出sort -u

答案3

考虑使用该find命令。

find . -type d -regextype posix-extended -regex 'RegEx'

在当前目录中查找目录类型的内容,使用 posix-extended 匹配路径名(与 grep -E 相同)。

答案4

# usage: dgrep regex dir
dgrep(){
        find "$2" -type d -print0 | xargs -0 sh -c '
                rex=$1; shift
                for d; do grep -sq "$rex" "$d"/* "$d"/.[!.]* && echo "$d"; done
        ' sh "$1"
}

grep -rl与+解决方案不同sed,这只会扫描目录中的文件,直到找到第一个匹配项 - 根据您的数据,这可能会大大加快速度。

-sq请随意在;之后添加 grep 选项在命令行上传递它们的脚本是可能的,但这会使一切变得复杂而没有什么好处。

相关内容