2013-03-27 46 views
0

我必須從兩種類型的列表中提取一個特殊的URL。從兩種類型的列表中提取URL

wav_list_01.txt:

http://www.example.com/3277rdsh6721vs2981fg66_453.wav?ID=8572145" 
http://www.example.com/3277rdsh6721vs2981fg66_1234.wav?ID=8572145" 
http://www.example.com/3277rdsh6721vs2981fg66_89.wav?ID=8572145" 
http://www.example.com/3277rdsh6721vs2981fg66_356.wav?ID=8572145" 

在這種類型列表中正確的網址永遠是一個以下劃線後4位數字:

http://www.example.com/3277rdsh6721vs2981fg66_1234.wav?ID=8572145" 

我可以用下面的做到這一點grep命令:

grep -o 'http[^"]*_[0-9]\{4\}.wav?ID=[0-9]\{1,\}' wav_list_01.txt 

現在到第問題。我還必須從另一種列表中提取特殊的URL。

wav_list_02.txt:

http://www.example.com/83d72jd72bnx27887f2s34_9.wav?ID=0942145" 
http://www.example.com/83d72jd72bnx27887f2s34.wav?ID=0942145" 
http://www.example.com/83d72jd72bnx27887f2s34_5.wav?ID=0942145" 

在這種類型列表中正確的網址永遠是一個WITHOUT下劃線和單位:

http://www.example.com/83d72jd72bnx27887f2s34.wav?ID=0942145" 

有什麼辦法我可以修改上面的grep命令來使用wav_list_02.txt嗎?如果不是在同一個腳本中處理這兩個列表的下一個最佳解決方案是什麼?

該腳本將運行在一個破折號殼中,因此該解決方案需要符合POSIX,最好也是乾淨和簡單的。

在此先感謝。

SOLUTION:

與塔爾曼幫助發現該溶液:

grep -o 'http[^"]*_[0-9]\{4\}.wav?ID=[0-9]\{1,\}\|\|http[^_]*?ID=[0-9]\{1,\}' 

回答

0

,你可以只使用不運算符「^」,並說,它可以是一切,但沒有下劃線 - 如果匹配你的網址,它就像'[^ _] *',而不是下劃線。

在grep命令的上方插入那個'或'運算符,它會將這個文件帶上四位數字,如果它們沒有包含下劃線。 記住要逃避這樣的操作符:'\ |'

+0

但是,它不會與wav_list_01.txt一起工作,或者我誤解了某些東西? – user2216606 2013-03-27 17:25:14

+0

好吧,我認爲我誤解了你的問題,你想要兩個文件匹配一個正則表達式? – Thalmann 2013-03-27 17:26:57

+0

啊啊現在我明白了,你可以使用或操作符我會修改我的帖子... – Thalmann 2013-03-27 17:30:44