我正在寻找一种快速方法来查找包含 2 个或更多模式的文件夹中的所有文件
grep -l -e foo -e bar ./*
或者
rg -l -e foo -e bar
显示同一行中包含“foo”和“bar”或不同行中包含“foo”或“bar”的所有文件,但我只想要在不同行中至少有一个“foo”匹配和一个“bar”匹配的文件。仅包含“foo”匹配或仅包含“bar”匹配的文件将被过滤掉。
我知道我可以链接 grep 调用,但这太慢了。
如果我有这样的文件夹:
\ndir:\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1.index1.html\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 2.index2.html\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 3.index3.html\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1.index1.html\n \xe2\x94\x82 \n\n
Run Code Online (Sandbox Code Playgroud)\n如何在命令中告知仅排除根文件夹中的ripgrep
文件,但仍搜索in 文件夹?index1.html
index1.html
a
当我搜索时:Rg <string>
,它正在 FZF 缓冲区中打开结果。文件名通常不会完全显示在其中。而且一旦逃脱,结果就消失了。如果需要再次检查同一个单词,我必须进行研究。
但:vim /pattern/g **/*
在快速修复中打开结果。有没有办法在quickfix窗口中打开Rg结果?如何显示Rg缓冲区中的完整文件名?
用grep
我可以搜索单词的开头和结尾
grep -e '\<leg\>' <where to search>
Run Code Online (Sandbox Code Playgroud)
这会找到I have a leg.
但不会play allegro here
。
Ripgrep (0.10.0) 似乎不支持这种写正则表达式的方式。我的问题是:
如何“grep”出现在单词的开头/结尾ripgrep
?
我最近将ripgrep添加到了我的vim 插件列表中,安装后,每当我加载 vim 时,我就开始收到此错误消息:
Error detected while processing /Users/my_macbook/.vim/plugged/vim-ripgrep/plugin/vim-ripgrep.vim:
line 149: E1208: -complete used without -nargs
Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)
打开有问题的文件并查看第 148-149 行可以发现:
148 command! -nargs=* -complete=file Rg :call s:Rg(<q-args>)
149 command! -complete=file RgRoot :call s:RgShowRoot()
Run Code Online (Sandbox Code Playgroud)
我真的超出了我的深度,特别是考虑到这个错误是通过简单安装插件生成的;我对底层文件 ( vim-ripgrep.vim
) 进行了 0 处更改。
有没有人在安装 ripgrep 后遇到类似的长期错误,如果是的话,你是如何解决的?
我有以下命令可以在命令行中模糊查找文件并在 VSCode 中打开所选文件:
fzf --print0 -e | xargs -0 -r code
Run Code Online (Sandbox Code Playgroud)
现在我希望能够在文件内容中搜索字符串。我可以在命令行中找到搜索的字符串:
rg . | fzf --print0 -e
Run Code Online (Sandbox Code Playgroud)
但现在使用以下命令在 VSCode 中打开文件不再起作用:
rg . | fzf --print0 -e | xargs -0 -r code
Run Code Online (Sandbox Code Playgroud)
因为 VSCode 传递了一个文件名,其中包含文件名本身和搜索字符串(当然是一个空文件)。
如何组合上述两个命令将文件名传递给包含搜索字符串的 VSCode?
我正在一个非常大的 github 存储库中工作,假设它的结构是这样的
\nproject-root\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 project-1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 subproject-a\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 subproject-others\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 project-2\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 subproject-b\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 subproject-others\n
Run Code Online (Sandbox Code Playgroud)\n有很多项目,每个项目又包含很多子项目。我正在研究其中一个子项目(例如subproject-a
)。当我在子项目(它是一个 python 子项目)中打开 vscode 时,我注意到它启动了许多rg
如下命令,并且我的 CPU 使用率超过 99%。我想知道这些 rg 命令是关于什么的?他们只是在子项目中搜索内容,还是在包含数万个文件的整个 git 存储库中搜索内容?为什么他们要消耗这么多资源?请问我怎样才能避免这种情况?
\n\n\n
/Applications/Visual Studio Code.app/Contents/Resources/app/node_modules.asar.unpacked/vscode-ripgrep/bin/rg --files --hidden --case-sensitive -g **/*.go/** -g **/*.go -g !**/.git -g !**/.svn -g !**/.hg -g !**/CVS -g !**/.DS_Store -g !**/.classpath -g !**/.factorypath -g !**/.project -g !**/.settings -g !**/node_modules -g !**/bower_components -g !**/*.code-search --no-ignore-parent --follow --quiet --no-config --no-ignore-global
如果我有这样的文件:
cat file1.txt
foo
bar
Run Code Online (Sandbox Code Playgroud)
cat file2.txt
foo
baz
Run Code Online (Sandbox Code Playgroud)
cat file3.txt
bar
baz
Run Code Online (Sandbox Code Playgroud)
ripgrep (或类似)上是否有一个命令可以搜索包含 foo 和 bar 的文件?例如,它将显示 file1.txt 但不显示其他两个文件?(注意 foo 和 bar 可能不在同一行。)
然后第二个问题,为了变得更奇特,我可以使用一些语法来计算带有 foo 的文件,但如果它们也包含 bar 则排除它们吗?例如,它只会显示 file2.txt?
谢谢!
这些为什么匹配:
echo 'CCAGCTACTCGGGAGGCTGAGGCTGGAGGATCGCTTGAGTCCAGGAGTTC' | grep -E 'CCAGCTACTCGGGAGGCTGAGGCTGGAGGATCGCTTGAGTCCAGGAG[ATCG]{2}C'
echo 'CCAGCTACTCGGGAGGCTGAGGCTGGAGGATCGCTTGAGTCCAGGAGTTC' | rg 'CCAGCTACTCGGGAGGCTGAGGCTGGAGGATCGCTTGAGTCCAGGAG[ATCG]{1,2}C'
echo 'CCAGCTACTCGGGAGGCTGAGGCTGGAGGATCGCTTGAGTCCAGGAGTTC' | rg 'CCAGCTACTCGGGAGGCTGAGGCTGGAGGATCGCTTGAGTCCAGGAG[ATCG]{2,}C'
echo 'CCAGCTACTCGGGAGGCTGAGGCTGGAGGATCGCTTGAGTCCAGGAGTTC' | awk '$0 ~ /CCAGCTACTCGGGAGGCTGAGGCTGGAGGATCGCTTGAGTCCAGGAG[ATCG]{2}C/'
Run Code Online (Sandbox Code Playgroud)
但这不是:
echo 'CCAGCTACTCGGGAGGCTGAGGCTGGAGGATCGCTTGAGTCCAGGAGTTC' | rg 'CCAGCTACTCGGGAGGCTGAGGCTGGAGGATCGCTTGAGTCCAGGAG[ATCG]{2}C'
Run Code Online (Sandbox Code Playgroud)
我的印象是ripgrep使用了rust regex引擎,该引擎应该能够处理字符类+重复?
我想"Hello
在文本文件中找到一个字符串(Hello 以双引号开头)ripgrep
。
通常,在 Bash 或 ZSH 中,这可以通过使用反斜杠转义或用单引号括起来来实现:
rg \"Hello
rg '"Hello'
Run Code Online (Sandbox Code Playgroud)
但是,在 MS Windows(Powershell 和 CMD)中,我尝试过这些,但没有一个奏效:
rg \"Hello
rg '"Hello'
rg `"Hello
rg '`"Hello'
Run Code Online (Sandbox Code Playgroud)
有没有办法在 MS Windows 中使用 ripgrep 转义单引号或双引号?
ripgrep ×10
grep ×3
regex ×2
vim ×2
cmd ×1
command-line ×1
fzf ×1
git ×1
powershell ×1
python ×1
search ×1
shell ×1
vim-plugin ×1
vim-quickfix ×1
xargs ×1