Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中,如何在不使用regex lookarounds的情况下从标记文件获取URL?_Regex_Bash_Grep_Regex Lookarounds - Fatal编程技术网

在bash中,如何在不使用regex lookarounds的情况下从标记文件获取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文件中删除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/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)}文件更简单。