使用递归 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 的答案更好