我只是想分享这个,并希望能得到更多类似的工具。
我有一个文本文件目录。我需要搜索其中包含 2 个(部分)单词的文件。关键字按随机顺序排列,但在同一行。
到目前为止,我可以使用这个:
$ rg -i '\w*keyword1\w*.*\w*keyword2\w*|\w*keyword2\w*.*\w*keyword1\w*' --glob '*.txt' --line-number -l /path/to/search
$ rg -g '*.txt' -l -i 'keyword1.*keyword2|keyword2.*keyword1' /path/to/search
这两者都可以完成相同的工作。
还有其他人可以做同样的工作吗?请分享。我发现自己经常需要这个来找到正确的文件。
但是我不知道如何搜索文件名是 2 个不按顺序的关键字的文件。如何使用 2 个不按顺序的关键字搜索文件名?示例: oddfilename_key1Nkey3Nkey2etc.txt 在巨大的数据库中搜索名称只记得由“key2”和“key3”组成的文件,但不确定顺序。
答案1
或许:
rg -iPlg '*{Key1*Key2,Key2*Key1}*.txt' '^(?=.*keyword1)(?=.*keyword2)' dir
使用-P
,我们得到具有前瞻运算符的 PCRE 正则表达式,因此我们可以匹配^
行的开头,前提是它后面跟着任意数量的字符keyword1
,并且后面跟着任意数量的字符keyword2
。
-g '*{Key1*Key2,Key2*Key1}*.txt'
是类似于 csh 大括号扩展-g '*Key1*Key2*.txt -g '*Key2*Key1*.txt'
的缩写,{x,y}
是对标准 shell glob 模式的 ripgrep 扩展。