【问题标题】:How to get grep -m1 to work in OSX如何让 grep -m1 在 OSX 中工作
【发布时间】:2014-09-10 18:32:49
【问题描述】:

我有一个脚本,我在 Linux 中使用得非常好,但现在我已经切换到 Mac,脚本仍然可以运行,但行为略有不同。

这是一个用于统计学生出席部门活动的脚本。我们使用便携式条形码扫描仪扫描他们的 ID,然后将所有扫描结果保存在每个日期的一个 csv 文件中。

我过去使用grep -m1 $ID csvfolder/* | wc -l 来计算他们的 ID 显示在多少个文件中。-m1 是必要的,以确保他们不会因为在同一事件中重复扫描而获得“额外信用” .

但是,当我在 Mac 中使用相同的命令时,它会在第一个文件中找到第一个匹配项时退出 grep。所以如果学生出现在 4 个文件中,wc -l 仍然返回 1

我如何(不安装 GNU 版本)模拟此功能?

【问题讨论】:

  • grep -m1 在 Mac 上在第一个匹配的文件中的第一个匹配之后停止,而不是在每个匹配的文件中的第一个匹配处停止。这是标准避免的那种问题——-m 不是一个标准化的选项。

标签: linux macos bash grep


【解决方案1】:

我没有方便的 Mac OS X 来测试它,但以下是 Posix 标准的 afaik:

grep -l "$ID" csvfolder/* | wc -l

grep 将打印包含匹配项的每个文件的名称。这应该同样适用于 Gnu grep。

【讨论】:

    【解决方案2】:

    您也可以使用awk 来完成此任务:

    awk -v id="$ID" '$0 ~ id{print 1; exit}' csvfolder/* | wc -l
    

    【讨论】:

      猜你喜欢
      • 2022-07-22
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 2016-05-30
      • 1970-01-01
      相关资源
      最近更新 更多