查找包含与2种不同模式匹配的行的文件

时间:2019-05-07 16:52:03

标签: bash grep

我正在尝试搜索我的代码库,以查找缩进不一致的文件。基本上,只要文件在内部保持一致,我都不在乎文件是否带有制表符或空格。

很明显,我可以运行grep -Prn "^\t" src来查找以制表符开头的行,并运行grep -Prn "^ " src来查找空格,但是我不知道如何搜索两个模式至少包含1个匹配项的文件

尽我所能提出类似的建议

for f in `grep -Prl "^\t" src` ; do grep -Pl "^ " $f; done

,但是对于大型代码库来说这非常慢。使用单个grep命令有更快的方法吗?

1 个答案:

答案 0 :(得分:0)

您是否要在src目录下查找缩进中包含制表符和空格的文件名(可能在单独的行中)?使用任何UNIX框上的任何shell中的任何find和任何awk就是这样:

find src -type f -exec awk '/^[[:space:]]*\t/{t=1} /^[[:space:]]* /{b=1} b&&t{print FILENAME; exit}' {} \;

否则,使用GNU find和GNU awk会更有效(因为awk将一次调用成批文件而不是每次调用1个文件):

find src -type f -exec awk '/^[[:space:]]*\t/{t=1} /^[[:space:]]* /{b=1} b&&t{print FILENAME; b=t=0; nextfile}' {} +