获取具有特定字符串

时间:2015-08-03 03:42:03

标签: string bash shell grep find

我有一个小问题,我希望有人可以帮助我。基本上,我有一个从Youtube下载缩略图的脚本,它正常工作,但现在我希望它更高级,并且可以选择提供播放列表的网址(系统可以选择已经制作)并获取html页面播放列表,然后查找包含/ watch?v =(视频的网址)的所有行,然后取出除视频ID之外的所有内容(v =之后的字符系列)。

现在我的下载系统正常工作,我只是找不到用/ watch来获取线路的方法?v =。

这是我下载网页和查找订单部分的代码

read -p "Enter the url of the playlist : " link #Ask for url

content=$(curl $link --silent) #Downloads the webpage

contentxt="$basedir/playlist_page.txt" #Creates a file to store the webpage

echo $content > "$contentxt" #Saves the webpage into the file

url=$(grep -F "/watch?v=" $contentxt) #Find a line with the /watch?v=

echo $url #Displays that line containing the url to be used later

谢谢!

1 个答案:

答案 0 :(得分:0)

以下是使用sed完成此操作的示例,在我刚刚在jsfiddle上创建的页面上进行了测试:

curl --silent http://jsfiddle.net/udfmq9jv/| grep -F '/watch?v='| sed -E 's!.*/watch\?v=([a-zA-Z0-9_-]*).*!\1!';
## a1Y73sPHKxw
## -rIEVBIP5yc
## dMH0bHeiRNg

请注意,正确的正则表达式非常重要:来自How to validate youtube video ids?,视频ID中的有效字符为字母,数字,下划线和短划线。

有几种方法可以将命令的输出收集到变量中。以下是使用流程替换,while循环和read完成的方法:

ids=(); while read -r; do ids+=("$REPLY"); done < <(curl --silent http://jsfiddle.net/udfmq9jv/| grep -F '/watch?v='| sed -E 's!.*/watch\?v=([a-zA-Z0-9_-]*).*!\1!');
echo ${#ids[@]};
## 3
echo "${ids[0]}";
## a1Y73sPHKxw
echo "${ids[1]}";
## -rIEVBIP5yc
echo "${ids[2]}";
## dMH0bHeiRNg