从文件中获取URL列表并创建编号数组

时间:2012-03-20 09:47:28

标签: arrays bash url sh

目前,我使用以下命令从文件中删除某些网址:

sed -e 's!\http\(s\)\{0,1\}://Goog.le[^[:space:]]*!!g' newfile

但是由于垃圾邮件越来越多(我获得了更多垃圾邮件网址,然后是真正的网址),我需要添加其他规则。

我想从文件fileA获取网址列表,将它们放入数组arrayB,然后向用户显示带有indexB的网址。

然后,我将输入不应删除的网址的网址indexB。使用这些数字,从高到低排序,我走过arrayB,从最高索引开始删除相应的索引号。此时,我的数组仅包含应从页面fileA中删除的网址。

然后我会再次浏览fileA,当我在网页和数组中找到网址时,我会将该网址从fileA移除到fileB

我现在主要关注的是如何将arrayBfileA进行比较,并删除fileAarrayB中的网址,当页面上的网址为在一行上,一起删除所有行。

需要注意的是,有时在一行中有一个好的和一个或多个错误的URL,并且不知道如何处理它。

1 个答案:

答案 0 :(得分:1)

您描述的一个问题是,您解释了有关您的方法的许多细节(从最高指数开始),而不解释原因。它看起来对我来说太过具体了。订单并不重要。

所以这是一种不同的方法:

#!/bin/bash
#
removeUnmatched () {
    key=$1
    shift
    for element
    do
        if [[ $key = $element ]]
        then
            # echo only for debugging
            echo "found $key"
            return
        fi
    done 
    # sed '/$url/d' fileA 
    echo remove $url from fileA 
}

#
# I guess you want to extract urlnames from fileA, so this would be
# urls=($(yourCommandOn fileA))
#
urls=($(< blacklist))
echo "Exclude from blacklist: (Ctrl-D to end)"
collect=$(select url in ${urls[@]}
do
  echo $url
done)
whitelist=($collect)
# echo ${whitelist[@]} 
for url in ${urls[@]}
do
    removeUnmatched $url ${whitelist[@]}
done

我使用数组,但不使用它们的索引。 Bashs select命令与索引一起使用。

我不知道你是如何自动从fileA获取网址的。是否以及为何要保存选择以供以后使用(fileB)。