我有一种感觉,这将作为副本关闭,因为这似乎是一个常见的问题......但在我的辩护中,我已经搜索了 SO 以及谷歌,但找不到任何东西。
我正在尝试使用 ripgrep 搜索 SQL 文件,但我想排除作为单行 SQL 注释一部分的匹配项。
- 我不需要担心多行
/* foobar */
注释。只有单行-- foobar
- 我不需要捕捉任何东西
- 我不需要担心字符串可能是文本的一部分,比如
SELECT '-- foobar'
orSELECT '--', foobar
。我可以接受那些错误的排除。
匹配示例:
- 匹配:
SELECT foobar
- 匹配:
, foobar
- 排除:
SELECT baz -- foobar
- 排除:
-- foobar
- 排除:
---foobar
- 排除:
-- blah foobar blah
又名,搜索foobar
但忽略匹配如果--
出现在该行之前的任何点。
我已经尝试过诸如负面后视和其他方法之类的方法,但我似乎无法让它们发挥作用。
这个答案似乎会让我到达那里: https ://stackoverflow.com/a/13873003/3474677
该答案说用于查找不以 . 开头的(?<!grad\()vec
匹配项。所以如果我把它翻译成我的用例,我会得到. 这有效......但仅用于排除包含它的行不处理其他场景。vec
grad(
(?<!--)foobar
--foobar
在最坏的情况下,我可以将 ripgrep 的结果通过管道传输到另一个过滤器并排除匹配的行,--.*foobar
但我希望找到一个一体化解决方案。