bash - 查找包含匹配 2 个不同模式的行的文件
问题描述
我正在尝试搜索我的代码库以查找缩进不一致的文件。基本上,我不在乎文件是否使用制表符或空格缩进,只要它在内部是一致的。
显然,我可以运行grep -Prn "^\t" src
以查找以制表符开头的行和grep -Prn "^ " src
空格,但我不知道如何搜索包含至少 1 个匹配这两种模式的文件。
我能想出的最好的东西
for f in `grep -Prl "^\t" src` ; do grep -Pl "^ " $f; done
但这对于大型代码库来说非常慢。有没有更快的方法可以用一个 grep 命令来做到这一点?
解决方案
您是否尝试在 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}' {} +
推荐阅读
- rest - grpc带rest作为网关有什么好处?
- extended-ascii - 是否有将 ISO 8859-1/windows-1252 编码字符转换为标准 ASCII 等价物的现成翻译字典?
- sugarcrm - 在 SugarCRM 中获取与团队相关的所有记录的最佳方法是什么
- dart - 使用颤振的集合中的值总和
- discord.js - 添加超时以侦听使用 Discord.js 机器人发送的消息的相同命令
- laravel - 如何列出不在数据透视表中的值?
- azure-active-directory - 仅限管理员查看 Azure AD 管理员角色组成员身份
- php - 通过 PHP Curl 调用 Soap WebService 时超时
- javascript - Jquery 从单独的数组中获取特定对象的最高值
- django - pymongo.errors.OperationFailure:身份验证失败