如果满足某些条件,我会尝试在一堆python脚本中匹配一些方法。我首先要检查的是文件中是否存在import re,如果存在,则查找re.sub(something)的所有情况。我尝试遵循文档here,了解如何使用if then而不使用else正则表达式,但似乎无法在有或没有pcre2的情况下与ripgrep一起工作。
我的下一个方法是使用组,所以使用rg -n "(^import.+re)|(re\.sub.+)" -r '$2',但是这种方法的问题是,因为第一个导入组匹配,所以我在输出中得到了许多空文件。$2处理正常。
我希望避免执行或组捕获,如果可能,使用regex if选项。
总而言之,我希望的是,如果import re出现在文件中的任何位置,那么搜索re\.sub.+,并使用ripgrep仅输出匹配的文件和行。使用ripgrep是一种硬依赖。
一些示例代码:
import re
for i in range(10):
re.match(something)
print(i)
re.sub(something)发布于 2019-05-10 19:23:11
这可以通过shell管道和xargs非常容易地完成。其思想是使用第一个正则表达式作为筛选器,查找要搜索的文件,使用第二个正则表达式显示发生re.sub的位置。
下面是三个要测试的Python文件。
import-without-sub.py有import re,但没有re.sub
import re
for i in range(10):
re.match(something)
print(i)import-with-sub.py同时具有import re和re.sub
import re
for i in range(10):
re.match(something)
print(i)
re.sub(something)最后,no-import.py没有import re,但有一个re.sub
for i in range(10):
re.match(something)
print(i)
re.sub(something)现在,下面的命令仅显示包含import re的文件中的re.sub匹配
rg '^import\s+re$' --files-with-matches --null | xargs -0 rg -F 're.sub('--files-with-matches和--null打印出由NUL字节分隔的所有匹配的文件路径。然后,xargs -0读取这些文件路径,并将它们转换为要提供给rg -F 're.sub('的参数。(我们使用--null和-0是为了正确处理包含空格的文件名。)
它在包含上述所有三个文件的目录中的输出为:
import-with-sub.py
7:re.sub(something)https://stackoverflow.com/questions/56049758
复制相似问题