我想批量编辑一大堆在grep中返回的文件。 (我知道,我应该在sed变得更好)。
所以,如果我这样做:
grep -rnI 'xg_icon-*'
如何将所有这些文件传输到vi?
答案 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 *`