Silversearcher / ack vs find,grep
目前,当我必须在代码中搜索复杂模式时,我通常使用find和grep的组合形式:
find / ( -type f -regextype posix-extended -regex '.*python3.*py' ) -exec grep -EliI 'b__[[:alnum:]]*_b' {} ; -exec cat {} ; > ~/python.py
虽然这看起来很长,但如果使用zsh,它实际上很短。 我只需键入f(第一个字符),然后从我的命令历史记录直接转到该命令。 此外,find / grep中的正则表达式已经过标准化和测试,因此没有任何意外或缺少搜索。
ripgrep / ag等等都是新的软件,当原来的维护者失去兴趣时,这些软件可能不会在几年后得到支持。
有没有计划在grep / grep的其他版本中将gitignore规则或优化包含在ag / ack / rg中? 这些优化是否有任何理由被包含在grep中?
对于那些转换过来的人来说:你们是否觉得切换到rg / ag / ack是值得的,特别是因为这些工具还将有一个学习曲线?
使用ag
。
你的例子的关键部分: ag -G '.*python3.*py' 'b__[[:alnum:]]*_b'
Ag在这里停留并使用比POSIX基本或扩展正则表达式更灵活的Perl正则表达式(PCRE)。 Grep -P
使用Perl正则表达式引擎,所以这与使用ag类似,没有一些后来的更现代的功能。 同样,ack就像ag,但速度较慢(虽然有一些更多的花里胡哨)。 Ag的文件正则表达式过滤(上面列举的-G标志)和内置的文件类型过滤器非常方便(例如--python)。 最近重命名的.ignore文件也提供了更好的调整。
由于大多数现代脚本语言都具有PCRE或者在PCRE(perl,python,ruby)中处理具有相似特征的正则表达式,许多完整语言(java,C ++)也具有接近相同的特征集(例如java.util.regex,Boost.Regex) ,我认为这是交换机的主要原因。 此外,它令你满意的将你的编程与你的命令技能集合在一起。
从我的角度来看,ripgrep是ag的主要竞争者,因为它速度更快,并且可以轻松添加文件类型。 也就是说,它没有像正则表达式引擎那样灵活:没有反向引用,也没有四处看。 有了这个想法,我推荐Ag。
链接地址: http://www.djcxy.com/p/78065.html上一篇: Silversearcher/ack vs find,grep
下一篇: Grep from pattern file to search in directory not working