正则表达式 if then without else in ripgrep
Regex if then without else in ripgrep
如果满足某些条件,我正在尝试匹配一堆 python 脚本中的某些方法。我要查看的第一件事是文件中是否存在 import re
,如果存在,则查找 re.sub(something)
的所有情况。我尝试按照文档 here 了解如何在没有 else 正则表达式的情况下使用 if then,但似乎无法使其与带或不带 pcre2 的 ripgrep 一起使用。
我的下一个方法是使用组,所以 rg -n "(^import.+re)|(re\.sub.+)" -r ''
,但这种方法的问题是因为第一个导入组匹配,我在输出中得到了很多空文件。 </code> 被正确处理。 </p>
<p>我希望避免进行 a 或 group 捕获,并尽可能使用 regex if 选项。 </p>
<p>总而言之,我希望的是,如果 <code>import re
出现在文件中的任何位置,则搜索 re\.sub.+
并使用 ripgrep
仅输出匹配的文件和行。使用 ripgrep 是一个硬依赖。
一些示例代码:
import re
for i in range(10):
re.match(something)
print(i)
re.sub(something)
这可以通过 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)
如果满足某些条件,我正在尝试匹配一堆 python 脚本中的某些方法。我要查看的第一件事是文件中是否存在 import re
,如果存在,则查找 re.sub(something)
的所有情况。我尝试按照文档 here 了解如何在没有 else 正则表达式的情况下使用 if then,但似乎无法使其与带或不带 pcre2 的 ripgrep 一起使用。
我的下一个方法是使用组,所以 rg -n "(^import.+re)|(re\.sub.+)" -r ''
,但这种方法的问题是因为第一个导入组匹配,我在输出中得到了很多空文件。 </code> 被正确处理。 </p>
<p>我希望避免进行 a 或 group 捕获,并尽可能使用 regex if 选项。 </p>
<p>总而言之,我希望的是,如果 <code>import re
出现在文件中的任何位置,则搜索 re\.sub.+
并使用 ripgrep
仅输出匹配的文件和行。使用 ripgrep 是一个硬依赖。
一些示例代码:
import re
for i in range(10):
re.match(something)
print(i)
re.sub(something)
这可以通过 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)