【问题标题】:Pipe grep output to xargs管道 grep 输出到 xargs
【发布时间】:2015-05-08 00:10:02
【问题描述】:

我正在尝试过滤 git ls-files 的输出以获取某些报告命令,然后将该输出通过管道传输到 xargs。我最初在 git ls-files 上使用 -z 效果很好,但现在我正在使用 grep,我需要恢复该功能。

尝试 grep 版本 -Z 对实际输出没有任何作用。

git ls-files | grep -Z -e={\*.js,\*.html}

【问题讨论】:

    标签: grep xargs


    【解决方案1】:

    grep 的-Z 选项似乎只适用于包含匹配内容的文件名,而不适用于匹配行的内容。这对我来说似乎很奇怪,但这似乎是它的工作原理。

    你实际上并不需要 grep 在这里(你不需要原来的 * 或者它没有增加任何价值)。

    git ls-files 采用一个模式来匹配文件名。

    所以你想在这里使用这个命令。

    git ls-files -z -- '*.js' '*.html'
    

    【讨论】:

    • 同意,我觉得它专门提到文件名很奇怪。不过,这解决了这个问题 - 我一直在查看 ls-files 文档,期待文件模式的特定参数。
    • 虽然,我知道 ls-files 不能排除在 repo 中跟踪的文件 - 在我的情况下,排除特别列出包含的文件可能更容易。
    • 我认为我没有遵循排除评论。 ls-files 可以显示未跟踪的文件。它只能显示被忽略的文件。它还具有排除模式支持。
    • 它只排除未跟踪的文件,如果文件已经在 repo 中跟踪,--exclude 参数不适用。我正在编写这些命令来快速计算作者编写的行数。我最初只想排除二进制文件列表,而不是将特定文件列入白名单 - 但我认为这两种方式实际上都同样冗长,所以这不是问题。
    • 啊,是的,排除仅适用于未跟踪的文件
    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 2018-11-18
    • 2020-07-17
    • 2016-04-21
    • 2018-12-11
    • 2016-01-31
    • 1970-01-01
    • 2020-10-01
    相关资源
    最近更新 更多