目前,我使用以下命令从文件中删除某些网址:
sed -e 's!\http\(s\)\{0,1\}://Goog.le[^[:space:]]*!!g' newfile
但是由于垃圾邮件越来越多(我获得了更多垃圾邮件网址,然后是真正的网址),我需要添加其他规则。
我想从文件fileA
获取网址列表,将它们放入数组arrayB
,然后向用户显示带有indexB
的网址。
然后,我将输入不应删除的网址的网址indexB
。使用这些数字,从高到低排序,我走过arrayB
,从最高索引开始删除相应的索引号。此时,我的数组仅包含应从页面fileA
中删除的网址。
然后我会再次浏览fileA
,当我在网页和数组中找到网址时,我会将该网址从fileA
移除到fileB
。
我现在主要关注的是如何将arrayB
与fileA
进行比较,并删除fileA
中arrayB
中的网址,当页面上的网址为在一行上,一起删除所有行。
需要注意的是,有时在一行中有一个好的和一个或多个错误的URL,并且不知道如何处理它。
答案 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)。