在bash中,如何在不使用regex lookarounds的情况下从标记文件获取URL?
我想从.asx文件中删除URL。文件通常是这样的在bash中,如何在不使用regex lookarounds的情况下从标记文件获取URL?,regex,bash,grep,regex-lookarounds,Regex,Bash,Grep,Regex Lookarounds,我想从.asx文件中删除URL。文件通常是这样的 <ASX VERSION="3.0"> <ENTRY> <TITLE>Blah Blah</TITLE> <AUTHOR>Someone</AUTHOR> <COPYRIGHT>(C)2014 Someone Else</COPYRIGHT> <REF HREF="mms://www.example.com/video/FilmName/Film
<ASX VERSION="3.0">
<ENTRY>
<TITLE>Blah Blah</TITLE>
<AUTHOR>Someone</AUTHOR>
<COPYRIGHT>(C)2014 Someone Else</COPYRIGHT>
<REF HREF="mms://www.example.com/video/FilmName/FilmName.wmv"/>
</ENTRY>
</ASX>
废话
某人
(C) 2014其他人
我想获取不带引号的URL,并删除彩信://
我提出了一个使用lookarounds的正则表达式,它成功地做到了这一点:
((?<=\/\/).*?).(?=\")
((?像这样:
awk -F '[:"]' '/REF HREF/ {print substr($3,3)}' file
www.example.com/video/FilmName/FilmName.wmv
但是我当然不能把它和grep一起使用。
为什么不呢?现代grep版本支持用于PCRE regex支持的-p
开关
试试这个:
grep -oP '((?<=//).*?).(?=")' file
www.example.com/video/FilmName/FilmName.wmv
grep-oP'((?对于BASH,您可以使用左/右模式匹配:
url='<REF HREF="mms://www.example.com/video/FilmName/FilmName.wmv"/>'
url=${url#<REF HREF=\"}
url=${url%\"/>}
echo "URL is '$url'" # Prints URL is 'mms://www.example.com/video/FilmName/FilmName.wmv'
url=''
url=${url}
echo“URL为“$URL”#打印URL为”mms://www.example.com/video/FilmName/FilmName.wmv'
${VAR#pattern}
去掉了$VAR
匹配pattern
${VAR#pattern}
的最短左手边glob,去掉了$VAR
匹配pattern
的最大左手边glob,${VAR%pattern}
和${VAR%pattern}
对$VAR
的右侧执行相同操作
一个容易记住的方法是#
在键盘上%
的左边。这教会了我。OSX用户的解决方案,其中grep
(从OSX 10.9开始)不支持-p
,因此环顾四周不是一个选项:
egrep -o '"[a-z]+://[^"]+' file | cut -d '/' -f 3-
当然,.Nice;awk-F'[:“]”/REF HREF/{print substr($3,3)}文件更简单。