首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的Grep失配问题

简单的Grep失配问题
EN

Stack Overflow用户
提问于 2011-07-10 20:46:49
回答 3查看 1K关注 0票数 1

我正在使用Ubuntu10.10和使用Grep处理一些HTML文件。

下面是HTML片段:

代码语言:javascript
复制
<a href="video.php?video=one-hd.mov"><img src="/1.jpg"><a href="video.php?video=normal.mov"><img src="/2.jpg"><a href="video.php?video=another-hd.mov">

我想提取one-hd.movanother-hd.mov,但忽略normal.mov

这是我的代码:

代码语言:javascript
复制
example='<a href="video.php?video=one-hd.mov"><img src="/1.jpg"><a href="video.php?video=normal.mov"><img src="/2.jpg"><a href="video.php?video=another-hd.mov">'
echo $example | grep -Po '(?<=video.php\?video=).*?(?=-hd.mov">)'

结果是:

代码语言:javascript
复制
one
normal.mov"><img src="/2.jpg"><a href="video.php?video=another

但我想

代码语言:javascript
复制
one
another

那里有错配。

这是因为所谓的贪婪正则表达式吗?

我正在唱GREP,但是欢迎任何命令行bash工具来解决这个问题,比如sed等等。

非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-10 21:06:27

您希望对grep使用perl -为什么不直接使用Perl呢?

代码语言:javascript
复制
echo "$example" | perl -nle 'm/.*?video.php\?video=([^"]+)">.*video.php\?video=([^"]+)".*/; print "=$1=$2="'

将打印

代码语言:javascript
复制
=one-hd.mov=another-hd.mov=
票数 2
EN

Stack Overflow用户

发布于 2011-07-10 21:10:13

下面是使用xmlstarlet的解决方案:

代码语言:javascript
复制
$ example='<a href="video.php?video=one-hd.mov"><img src="/1.jpg"><a href="video.php?video=normal.mov"><img src="/2.jpg"><a href="video.php?video=another-hd.mov">'
$ echo $example | xmlstarlet fo -R 2>/dev/null | xmlstarlet sel -t -m "//*[substring(@href, string-length(@href) - 6, 7) = '-hd.mov']" -v 'substring(@href,17, string-length(@href) - 17 - 3)' -n
one-hd
another-hd

$
票数 1
EN

Stack Overflow用户

发布于 2011-07-10 21:18:12

使用awk的解决方案:

代码语言:javascript
复制
{
    for(i=1;i<NF;i++) {
        if ($i ~ /mov/) {
            if ($i !~ /normal/){
                sub(/^.*=/, "", $i)
                print $i
            }
        }
    }
}

产出:

代码语言:javascript
复制
$ awk -F'"' -f h.awk html
one-hd.mov
another-hd.mov

但是,我强烈建议您使用html解析器来代替,类似于BeautifulSoup

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6643565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档