2016-07-28 50 views
-1

我有一個python腳本,它從pastebin.com/archive中提取URL,它具有粘貼鏈接(它在url中的pastbin.com後有8個隨機數字)。我當前的輸出是一個.txt文件,其中包含下面的數據,我只希望粘貼鏈接(例如:http://pastebin.com///Y5JhyKQT),而不是指向其他頁面(如pastebin.com/tools)的鏈接。這是我可以設置wget去拉每個單獨的粘貼。提取具有特定字符數的行

我可以考慮這樣做的唯一方法是編寫一個bash腳本來計算每行中的字符數,並且只保留包含30個字符的行(這是鏈接到粘貼的URL的長度)。

我不知道如何使用grep或awk來實現類似這樣的事情,也許使用while while循環?任何幫助,將不勝感激!

http://pastebin.com///tools 
http://pastebin.com//top.location.href 
http://pastebin.com///trends 
http://pastebin.com///Y5JhyKQT <<< I want to keep this 
http://pastebin.com//= 
http://pastebin.com///> 
+0

你可以在Python中輕鬆完成,所以你不必得到噪聲,然後用wget檢查它。看到我的答案python下面。如果超過長度,則不要寫入文件。 –

+1

你說你想保留的行在'Y5JhyKQT'結尾,所以在末尾沒有'8個隨機數字',所以我假設你的意思是'8個隨機字母數字字符。那麼,如果以「潮流」而不是「趨勢」爲代表的8個字符的單詞結尾,那麼您如何區分那些在「趨勢」之前不需要的行?或者,這只是一個完全不相干的紅鯡魚你扔在那裏,所有真正重要的是行長是30個字符? –

回答

0
#!/usr/bin/env zsh 
while read aline 
do 
    if [[ ${#aline} == 30 ]]; then                                       
     #do something 
    fi 
done 

這在bash man pages 「參數擴展」 部分下記錄。

EDIT =此溶液是zsh的僅

+2

不要這樣做。請參閱[爲什麼要使用shell循環處理文本被認爲是壞習慣](http://unix.stackexchange.com/questions/169716/why-is-using-a-shell -loop到過程文本視爲壞實踐)。 –

+0

哎呀,我想我一直在使用zsh的時間太長了 –

+0

在zsh中幾乎所有相同的問題仍然是錯誤的方法。一個shell是一個環境,通過它可以用一種語言來調用工具來排序這些調用,但它不是一個操縱文本的工具。 –

1

從您發佈它看起來像所有你需要的是樣本:

grep -E '/[[:alnum:]]{8}$' file 

或可能:

grep -E '^.{30}$' file 

如果不爲你工作,說明原因,並提供一個更好的樣本。

+0

爲什麼不'awk'length()== 30''?這將工作,沒有正則表達式,它很乾淨,不是嗎? – hek2mgl

+0

idk如果函數調用的速度比regexp比較快,awk必須對每行進行字段拆分,所以我大概99%確定grep會更加高效並且更簡潔。 nbd無論如何。我開始思考這個關鍵是最後的8個字母是字母數字,所以有點帶領我走下grep/regexp路徑。 –

+1

感覺你是對的。分割成字段是不必要的開銷。感謝您的反饋! – hek2mgl