Regex 使用curl列出文件

Regex 使用curl列出文件,regex,curl,perl,sed,Regex,Curl,Perl,Sed,我试图列出这个网站上所有的gz文件 site=http://ftp.ebi.ac.uk/pub/databases/uniprot/current_release/rdf/ curl -s "$site" --list-only | sed -n 's%.*href="rdf/uni([^"]*\.rdf.gz)".*%\1%p' 但我得到了这个错误: sed: -e expression #1, char 40: invalid reference \1 on `s' command's R

我试图列出这个网站上所有的gz文件

site=http://ftp.ebi.ac.uk/pub/databases/uniprot/current_release/rdf/
curl -s "$site" --list-only | sed -n 's%.*href="rdf/uni([^"]*\.rdf.gz)".*%\1%p'
但我得到了这个错误:

sed: -e expression #1, char 40: invalid reference \1 on `s' command's RHS

我会避免使用
regex
来解析
html
。在这里,您可以选择使用and
mojolicious
作为解析器:

perl -Mojo -E '
    g(q|http://ftp.ebi.ac.uk/pub/databases/uniprot/current_release/rdf/|)
    ->dom
    ->find(q|a|)
    ->each(sub { 
        my $t =  $_->text; 
        say $t if $t =~ m/rdf\.gz\Z/ 
    })'
但是如果你坚持,你的正则表达式有一些问题。首先,必须对括号进行转义才能进行分组。其次,
rdf/uni
不匹配。第三,当您执行
[^”]*
操作时,它会绕过扩展名
rdf.gz
。将其更改为查找
,然后检查扩展名,但我记得这是非常脆弱的。它可能在许多方面失败,例如,文件名中包含

curl -s "$site" --list-only | sed -n 's%.*href="\([^.]*\.rdf\.gz\)".*%\n\1%; ta; b; :a; s%.*\n%%; p'
两个命令都产生:

citations.rdf.gz
databases.rdf.gz
diseases.rdf.gz
enzyme.rdf.gz
go.rdf.gz
journals.rdf.gz
keywords.rdf.gz
locations.rdf.gz
pathways.rdf.gz
taxonomy.rdf.gz
tissues.rdf.gz
uniparc.rdf.gz
uniprot.rdf.gz
uniref.rdf.gz