【问题标题】:bash grep results into arraybash grep 结果放入数组
【发布时间】:2011-11-20 23:47:06
【问题描述】:

在 bash 中,我试图将我的 grep 结果收集到数组中,每个单元格包含每一行。 我正在用这条线下载网址

wget -O 索引 -E $CurrentURL

然后我想将“索引”文件结果(其他 url)grep 到数组中每个单元格的每一行, 正确的语法应该是什么?

数组=(grep "some expression" index)

??

【问题讨论】:

  • 这是您需要找到链接的地方,对吗?那么链接在哪里?很难为 URL 创建一个全面的正则表达式。

标签: arrays bash grep


【解决方案1】:
 readarray GREPPED < <(grep "some expression" index)
 for item in "${GREPPED[@]}"
 do
     # echo
     echo "${item}"   
 done

哦,像这样组合-v grep:

 egrep -v '\.(jpg|gif|xml|zip|asp|php|pdf|rar|cgi|html?)'

【讨论】:

  • 谢谢,我会用它来改进我的代码,你写的第一个代码块是做什么的?从这样的数组中读取或第一行也放入数组中?
  • 第一行输出到数组:gnu.org/s/bash/manual/html_node/Bash-Builtins.html;其他 4 行只是演示如何(空白安全地)迭代它们
  • 请注意,'readarray' 是 Bash 的一个非常新的补充。它几乎在我工作的所有 Linux 服务器上都不可用,甚至在 Cygwin 和 Mingw 安装上也不可用。如果您想要一个便携式解决方案,请参阅下面我的“可能大多数...”帖子。
【解决方案2】:

在几个糟糕的替代方案中,最优雅的可能是使用临时文件。

wget $blah | grep 'whatever' > $TMPFILE
declare -a arr
declare -i i=0
while read; do
    arr[$i]="$REPLY"
    ((i = i + 1))
done < $TMPFILE

我没有时间解释原因,但不要直接通过管道进入 read。

没有 Unix shell 是适合此任务的工具。 Perl、Groovy、Java、Python...很多语言都可以优雅地处理这个问题,但没有一个 Unix shell。

【讨论】:

    猜你喜欢
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2020-05-19
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多