你能批量编辑grep中返回的所有文件吗?

mag*_*ger 54 vim search command-line grep sed

我想批量编辑一大堆在grep中返回的文件.(我知道,我应该在sed变得更好).

所以,如果我这样做:

grep -rnI 'xg_icon-*'
Run Code Online (Sandbox Code Playgroud)

如何将所有这些文件传输到vi?

jam*_*san 78

最简单的方法是让grep只返回与模式匹配的文件名(-l而不是-n).在子shell中运行它并将结果提供给Vim.

vim $(grep -rIl 'xg_icon-*' *)
Run Code Online (Sandbox Code Playgroud)

  • 通常在'grep ...'给我正确的结果之后,我做一个`vi $(!! -l)`.可能在所有现代Bash上工作,但如果我不记得在MSysGit/Cygwin上. (6认同)

Ben*_*enj 21

一个很好的通用解决方案是使用xargs将stdout从像grep这样的进程转换为参数列表.

一个la:

grep -rIl 'xg_icon-*' | xargs vi
Run Code Online (Sandbox Code Playgroud)

  • 在我的mac(终端)中,在使用vim执行此操作后,我的终端在stdin上遇到了一些时髦的问题.与其他解决方案不同.人物没有明显地显示出来等等.想法? (3认同)

小智 7

如果您使用vim和-p选项,它将打开选项卡中的每个文件,您可以使用gt或gT在它们之间切换,如果您在终端中有鼠标支持,甚至可以在鼠标之间切换


Jae*_*aen 7

您无需处理grep输出即可完成!这甚至可以让你走右边(使用:help quickfix命令,例如.:cn:cw).所以,如果你使用bash或zsh:

vim -q <(grep foo *.c)