2013-09-13 5 views
2

Я пытаюсь перечислить все файлы 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 

ответ

3

Я хотел бы избежать regex разобрать html. Здесь у вас есть альтернатива с и 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 
Смежные вопросы