使用递归 grep 过滤文件,然后内联使用 sed
Filtering files using recursive grep then using sed on them inline
例如,如果我想打开其中包含 int
语句的所有文件,我会使用 grep 并使用 xargs
[=20 将搜索结果通过管道传输到 vim
=]
grep -rl 'int' . | xargs vim
通常,如果我想用 float
替换 int
,我会通过 sed
这样做
sed 's/\<int\>/float/g' foo.c
但是如果我想找到所有包含单词 int
的文件,然后对文件内联进行单词替换(例如 sed -i 's/\<int\>/float/g'
)
But how would I combine the two
你会做的只是:
grep -rl 'int' . | xargs sed -i 's/\<int\>/float/g'
您可以使用 -s
标志将命令文件传递给 vim,因此我相信您可以创建一个名为“cmd.vim”的 'commands' 文件,其中包含:s/int/float/g
行然后使用 grep -rl 'int' . | xargs vim -s cmd.vim
.
编辑
如果您想在 vim 中将文件从 int 更改为 float 后保持打开状态;如果您只想进行更改@KamilCuk 的答案更好