2012-03-20 19 views
1

目前我使用以下方法來從文件中刪除某些網址:獲取URL列表,並進行編號的陣列

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

但由於越來越多的垃圾郵件(我收到更多垃圾郵件的URL,然後真正的網址)我需要添加其他規則。

我想從文件fileA獲取一個URL列表,將它們放入數組arrayB,然後向用戶顯示一個indexB的URL。

然後,我將輸入網址indexB號碼爲不應刪除的網址。隨着這些數字從高到低排序,我走過arrayB,從最高指數開始刪除相應的指數。此時我的數組只包含應該從頁面fileA中刪除的URL。

然後我會再次走過fileA,當我在頁面和數組中找到一個URL時,我將從該fileA中刪除該URL到fileB。現在

我主要關心的是如何與fileA比較arrayB並刪除fileA這是在arrayB,當頁面上的URL是在一行的URL,刪除行一起。

一個告誡,有時在一行中有一個很好的和一個或多個錯誤的URL,不知道如何處理。

+1

如果我理解正確(fileA = newfile),fileA中的url是黑名單候選列表?什麼是URL列表的格式?一個字符串=一行=一個URL?源和目標的一個簡短例子就可以。 – 2012-03-20 10:10:10

+0

謝謝你的回覆。我的fileA是一個html源文件,其中包含http:.... url在頁面內。有些在一行上,有時在一行中有兩行,有些在文本內部隱藏。 FileA應該是一個被清理的文件。 – 2012-03-20 13:59:14

回答

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自動獲取URL。是否以及爲什麼要保存選擇以備後用(fi​​leB)。

+0

謝謝。您的應用可能是正確的,但是(當然有一個但是:-))我確實有一些代碼在其他地方運行,並希望在一個腳本中完成。 – 2012-03-20 14:10:00

+0

嗯,我必須快速添加評論,即使當我等待20秒鐘,我收到警告。
有趣的是你的功能。我必須弄清楚什麼是shift和$元素在做什麼,因爲我錯誤** $ 2 **在$ withlist數組參數中。
關於我的問題的最後一部分,當該行只有一個列入黑名單的URL時,如何刪除整行的url?再次感謝。 – 2012-03-20 14:20:41

+0

'for element'與'$ *'中的元素相同,可以在函數和腳本中使用。 'shift'放棄了$ *的第一個元素,所以如果你有一個叫'foo 1 2 3'的函數,那麼你有一個帶有3個參數的函數,$ 1,$ 2和$ 3。如果你在foo內部轉移,$ 2獲得$ 1,$ 3獲得$ 2 - 你只剩下2個參數。我們使用未知數量的參數調用該函數,但第一個不是列表,而是要在列表中查找的元素。將第一個參數保存爲$ key之後,移動將刪除舊的$ 1,並以白名單的網址列表結尾爲$ *。 – 2012-03-20 15:50:36