Bash Mapfile 或在 grep 文件内容时读取

Posted

技术标签:

【中文标题】Bash Mapfile 或在 grep 文件内容时读取【英文标题】:Bash Mapfile or Read while grep-ing contents of a file 【发布时间】: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 吗?

【问题讨论】:

你的第二个命令对我来说似乎工作正常。 【参考方案1】:

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

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

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

【讨论】:

以上是关于Bash Mapfile 或在 grep 文件内容时读取的主要内容,如果未能解决你的问题,请参考以下文章

Linux与bash:2.Linux终端命令之三剑客命令(grep,sed,awk)

如何 grep 字符串的目录,将其重写为其他内容并保存在 bash 中? [复制]

基于mapfile的小文件存储方案

bash Shell 总结《三》

MapServer Mapfile中具有相同名称但具有多个比例的图层

在Bash中使用cat和grep命令