你可以批量编辑在grep中返回的所有文件?
我想批量编辑一大堆在grep中返回的文件。 (我知道,我应该在sed上更好)。
所以如果我这样做:
grep -rnI 'xg_icon-*'
我如何将所有这些文件转换为vi?
最简单的方法是让grep只返回匹配模式的文件名( -l
而不是-n
)。 在一个子shell中运行,并将结果提供给Vim。
vim $(grep -rIl 'xg_icon-*' *)
一个很好的通用解决scheme就是使用xargs将一个类似于grep的进程的stdout转换为一个参数列表。
阿拉:
grep -rIl 'xg_icon-*' | xargs vi
如果你使用vim和-p选项,它会在一个标签页中打开每个文件,你可以使用gt或者gT在它们之间切换,或者如果你在terminal里有鼠标支持
你可以做任何处理的grep输出! 这甚至可以让你去正确的路线(使用:help quickfix
命令,例如:cn
或:cw
)。 所以,如果你使用bash或者zsh:
vim -q <(grep foo * .c)
如果你想要编辑的文件在所有文件中是相似的,那么使用vi手动执行它就没有意义了。 (尽pipevi也可以编写脚本),假设它看起来像这样,因为你从来没有提到你想编辑的东西
grep -rnI 'xg_icon-*' | while read FILE do sed -i.bak 's/old/new/g' $FILE # (or other editing commands, eg awk... ) done
vi `grep -l -i findthisword *`