我有一个以这种格式构建的results.txt文件:
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
答案 0 :(得分: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 :(得分: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 :(得分:1)
使用perl单行:
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