2013-03-13 36 views
2

我有一個以這種形式構成的RESULTS.TXT文件:SED/AWK /剪切/ grep的 - 最好的方法來提取字符串

Uncharted 3: Javithaxx l Rampant l Graveyard l Team Deathmatch HD (D1VpWBaxR8c) 
Matt Darey feat. Kate Louise Smith - See The Sun (Toby Hedges Remix) (EQHdC_gGnA0) 
The Matrix State (SXP06Oax70o) 
Above & Beyond - Group Therapy Radio 014 (guest Lange) (2013-02-08) (8aOdRACuXiU) 

我想創建指定的新文件中提取YouTube網址ID在每行線「8aOdRACuXiU」

我試圖建立這樣的URL在新文件中的最後一個字符: http://www.youtube.com/watch?v=8aOdRACuXiU&hd=1

注意,我附加了& HD = 1到字符串,我我試圖被替換。我曾嘗試使用Linux反向和切割,但反向或修改我的數據。這裏最困難的部分是我的文本文件中的每一行都會有括號的條目,我只關心在最後一組括號之間獲取數據。每一行都有一個可變長度,所以這也是沒有用的。關於在行尾使用grep和。$怎麼樣?

綜上所述,我想從RESULTS.TXT提取YouTube的ID,並將其導出到一個新的文件格式如下:http://www.youtube.com/watch?v=8aOdRACuXiU&hd=1

回答

1
$ sed 's!.*(\(.*\))!http://www.youtube.com/watch?v=\1\&hd=1!' results.txt 
http://www.youtube.com/watch?v=D1VpWBaxR8c&hd=1 
http://www.youtube.com/watch?v=EQHdC_gGnA0&hd=1 
http://www.youtube.com/watch?v=SXP06Oax70o&hd=1 
http://www.youtube.com/watch?v=8aOdRACuXiU&hd=1 

這裏,.*(\(.*\))尋找一雙的最後一次出現圓括號,並捕獲括號內的字符。然後使用\1將捕獲的組插入到URL中。

2

使用awk

awk '{ 
    v = substr($NF, 2, length($NF) - 2) 
    printf "%s%s%s\n", "http://www.youtube.com/watch?v=", v, "&hd=1" 
}' infile 

它產生:

http://www.youtube.com/watch?v=D1VpWBaxR8c&hd=1 
http://www.youtube.com/watch?v=EQHdC_gGnA0&hd=1 
http://www.youtube.com/watch?v=SXP06Oax70o&hd=1 
http://www.youtube.com/watch?v=8aOdRACuXiU&hd=1 
1

使用一行代碼:

perl -lne 'printf "http://www.youtube.com/watch?v=%s&hd=1\n", $& if /[^\(]+(?=\)$)/' file.txt 

或多行版本:

perl -lne ' 
    printf(
     "http://www.youtube.com/watch?v=%s&hd=1\n", 
     $& 
    ) if /[^\(]+(?=\)$)/ 
' file.txt 
相關問題