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

时间:2009-11-11 16:41:12

标签: search vim command-line sed grep

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

所以,如果我这样做:

grep -rnI 'xg_icon-*'

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

6 个答案:

答案 0 :(得分:76)

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

vim $(grep -rIl 'xg_icon-*' *)

答案 1 :(得分:21)

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

一个la:

grep -rIl 'xg_icon-*' | xargs vi

答案 2 :(得分:7)

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

答案 3 :(得分:7)

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

vim -q <(grep foo *.c)

答案 4 :(得分:1)

如果要编辑的内容在所有文件中都相似,则无需使用vi手动执行此操作。 (虽然vi也可以编写脚本),假设它看起来像这样,因为你从来没有提到你想要编辑的内容

grep -rnI 'xg_icon-*' | while read FILE
do
    sed -i.bak 's/old/new/g' $FILE # (or other editing commands, eg awk... )
done

答案 5 :(得分:1)

vi `grep -l -i findthisword *`