Silversearcher/ack vs find,grep



当前我必须在代码中搜索复杂的模式时,我通常会在形式中使用查找和grep的组合:

find / ( -type f -regextype posix-extended -regex  '.*python3.*py' ) -exec grep -EliI 'b__[[:alnum:]]*_b' {} ; -exec cat {} ; > ~/python.py

虽然这看起来很长远,但如果您使用ZSH,实际上它实际上很短。我只是键入F(第一个字符),然后直接从我的命令历史记录中转到此命令。此外,查找/GREP中的正则是标准化和测试,因此没有任何惊喜或缺失的搜索。

RIPGREP/AG等是新软件,当原始Maintaner失去兴趣时,几年后可能会支持几年。

  1. 是否有任何计划在GREP/其他版本的GREP中包括.gitignore规则或优化?有什么原因是为什么这些优化被/不包含在GREP中?

  2. 对于那些切换的人:你们是否觉得值得切换到RG/ag/ack,尤其是因为这些工具也将有一个学习曲线?

使用ag

示例的关键部分: ag -G '.*python3.*py' 'b__[[:alnum:]]*_b'

ag在这里留下来并使用Perl Regex(PCRE),它比Posix Basic或扩展正则表达式更灵活。Grep -P使用Perl Regex引擎,因此,这类似于使用AG,而没有一些更现代的功能。同样,ACK就像AG一样,但较慢(尽管肯定还有一些铃铛和哨子)。AG的文件Regexes过滤(如上所述的-g标志)和内置文件类型过滤器非常方便(例如 - python)。最近重命名的.ignore文件还提供了更精细的调整。

,由于大多数现代脚本语言具有PCRE或处理REGEXES在PCRE中具有相似功能(Perl,Python,Ruby),因此许多完整的语言(Java,C )都具有等效的功能集(例如Java.util.regex,Boost,Boost,Boost,Boost.regex),我认为这是切换的主要原因。此外,将您的编程与命令线技能集统一,这是令人满意的。

从我的角度来看,ripgrep是AG的主要竞争者,因为它更快并且具有添加文件类型的简便方法。也就是说,它没有那么灵活的正则发动机:没有反向文音也没有外观。有了这一点,我建议AG。

最新更新