Я хотел бы избежать regex
разобрать html
. Здесь у вас есть альтернатива с perl и 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/
})'
Но если вы настаиваете с sed, регулярное выражение имеет некоторые проблемы. Во-первых, скобки должны быть экранированы для группировки. Во-вторых, 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