gpt4 book ai didi

regex - 在大型项目中使用 ack 查找打印线

转载 作者:行者123 更新时间:2023-12-04 18:30:52 25 4
gpt4 key购买 nike

所以我有一个非常大的项目,它在运行时打印一个基本上是这样的数据集:

x,y,z,?,?



我想找到打印的位置,以便我可以删除它。

我已经为 std::cout 尝试了 ack-grep,但是文件太多了。有谁知道如何在一行中搜索 std::cout 和 4 个逗号(即我知道 std::cout 和 4 个逗号会出现在该行中,但我不确定还有什么)。我想也许会有一些正则表达式用于此,如 find std::cout 和 ","但其中四个。

有任何想法吗?

最佳答案

非常同意的方法

ack 'cout.+(.+,){4,}' --cpp

请注意,它是 .+不是 .* , 因为 .*将匹配一个空字符串,所以 ,,,,会匹配。你想确保逗号之间有一些东西。我还添加了 --cpp标志,以便它只选择要搜索的 C++ 文件。

现在,您说您想删除匹配的每一行,因此您可以通过以下方式扩展此解决方案来做到这一点。当然,你会想要 确保您在版本控制中拥有所有源代码,或者至少有一个备份 ,以防出现问题。我无法确切地说出您的代码是什么样的。您必须检查代码是否适用于您的情况。

如果您发现 ack 找到的每一行都是您要删除的,您可以使用 Perl 删除这些行。您使用的正则表达式是相同的,因为 ack 在 Perl 中并使用 Perl 正则表达式。

ack -f --cpp | xargs perl -i -n -e'print unless /cout.+(.+){4,}/'
ack -f --cpp告诉 ack 生成树中所有 C++ 文件的列表,然后 xargs 重复调用该 Perl 命令行。 perl 的 -i选项说“就地编辑文件”,-n告诉 Perl 循环输入文件,-e给出每行要执行的命令。在这种情况下,我们告诉 Perl 打印它刚刚读取的任何行,除非它与该正则表达式匹配。这有效地从每个文件中删除了匹配的行。

关于regex - 在大型项目中使用 ack 查找打印线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11404975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com