【问题标题】:Bash Mapfile or Read while grep-ing contents of a fileBash Mapfile 或在 grep 文件内容时读取
【发布时间】:2020-04-09 00:27:14
【问题描述】:

只是寻找其他任何可能更好的方法来执行以下操作。外壳检查正在调用“SC2002 无用的猫”,而我试图缓解的所有其他方式都失败了。它按预期工作,所以我倾向于不理会它 - 除非有任何其他想法。

#!/bin/bash
y=0
mapfile -O "$y" -t "ARRAY_NAME" < <(cat "${FILENAME}" | grep "pattern 1" | grep "pattern 2")

工作正常,但命中 SC2002 无用猫。所以,我试着很明显:

mapfile -O "$y" -t "ARRAY_NAME" < <(grep -e "pattern 1" -e "pattern 2" "${FILENAME}")

不高兴 - 导致“找不到命令 grep”

现在,我可以简单地将文件逐行读取到带有 mapfile 的数组中,但我不能只 grep 出我需要的行 - 我也可以对 read 做同样的事情,这可能更好,但有同样的 grep 问题。

所以有什么想法吗?在这种情况下我可以忽略 SC2002 吗?

【问题讨论】:

  • 你的第二个命令对我来说似乎工作正常。

标签: arrays bash grep cat shellcheck


【解决方案1】:

在管道开头使用“cat filename”(单个文件)通常可以通过将管道中 NEXT 命令的标准输入重定向到文件中来消除。

mapfile -O "$y" -t "ARRAY_NAME" < <(grep "pattern 1" <"${FILENAME}"| grep "pattern 2")

除非你关心效率的每一个百分比,而这条线是性能的瓶颈,如果你愿意,可以忽略这条消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多