【问题标题】:Mac open grep file listMac 打开 grep 文件列表
【发布时间】:2013-05-04 05:13:24
【问题描述】:

我想在文件中搜索一个字符串并将生成的文件列表通过管道传递给 OSX 的“打开”命令,从而打开所有包含该字符串的文件,以便在其默认编辑器(也不是 vim)中进行编辑。

例如,运行:

find . -name "*.txt" | xargs grep -l "RANDOMSTRING"

可能会返回:

./folder1/file1.txt
./folder1/file2.txt
./folder2/file3.txt
./file4.txt

但是,简单地将这个列表传递给 open 命令会失败:

find . -name "*.txt" | xargs grep -l "RANDOMSTRING" | open

我认为这是因为“换行符”或“回车符”,因为运行:

open ./folder1/file1.txt ./folder1/file2.txt ./folder2/file3.txt ./file4.txt

有效。

我只是不确定如何从返回的输出中删除换行符并将其传递给 open 命令。我需要另一个命令来管道输出,它将正确格式化文件列表,然后将列表传递给打开命令。虽然换行符甚至可能不是问题。

附: - 我想创建一个临时文件来执行此操作。但是,我愿意创建 .zshrc 或 .bashrc 函数。

【问题讨论】:

  • 尝试在最后一个管道中使用xargs open
  • @abasu。做到了。您应该提交一个答案,以便我将其标记为正确。如果你不这样做,我会这样其他人可以看到如何做到这一点。
  • 谢谢 :) 我发布了答案。

标签: file file-io command-line grep pipe


【解决方案1】:

find . -name "*.txt" | xargs grep -l "RANDOMSTRING" | xargs open

只保留open 不起作用,因为命令open 期望输入是正确的格式,而不是来自标准输入管道。 xargs 可以从标准输入中逐行读取并将其提供给open。另外作为旁注,xargs 有时会遇到文件名包含空格的问题。因此,使用 find 时,最后使用 -print0 选项来处理它。 man xargs 中提供了使用 xargs 查找的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2022-06-14
    相关资源
    最近更新 更多