【问题标题】:Filtering files using recursive grep then using sed on them inline使用递归 grep 过滤文件,然后对它们内联使用 sed
【发布时间】:2021-03-31 06:17:37
【问题描述】:

例如,如果我想打开其中包含 int 语句的所有文件,我使用 grep 并使用 xargs 将搜索结果通过管道传输到 vim

grep -rl 'int' . | xargs vim

通常,如果我想用float 替换int,我会通过sed 这样做

sed 's/\<int\>/float/g' foo.c

但是,如果我想找到所有包含单词int 的文件,然后对内联文件进行单词替换(例如sed -i 's/\&lt;int\&gt;/float/g'),我将如何将两者结合起来

【问题讨论】:

  • 你能做类似grep -rl 'int' . | xargs vim -s :s/int/float/g的事情吗?
  • @jared_mamrot,你问这很有趣,但我尝试了bufdo s/int/float/g,但我认为合成干扰它,因为它只适用于它发现的第一个int(它也给出了50个错误)

标签: sed grep xargs


【解决方案1】:

但我如何将两者结合起来

你会这样做:

grep -rl 'int' . | xargs sed -i 's/\<int\>/float/g'

【讨论】:

  • 哦,我认为sed 会将来自 STDIN 的输入视为内容而不是文件名
  • 这就是xargs 的用途。
【解决方案2】:

您可以使用-s 标志将命令文件传递给vim,所以我相信您可以创建一个名为“cmd.vim”的“命令”文件,其中包含:s/int/float/g 行,然后使用grep -rl 'int' . | xargs vim -s cmd.vim

编辑

如果你想在将文件从 int 更改为 float 后在 vim 中保持打开状态;如果您只想做出改变@KamilCuk 的答案会更好

【讨论】:

    猜你喜欢
    • 2014-04-23
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2013-02-16
    • 2023-03-03
    相关资源
    最近更新 更多