Estoy tratando de lista de todos los archivos gz de este sitio web

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)".*%%p'

Pero estoy recibiendo este error:

sed: -e expression #1, char 40: invalid reference  on `s' command's RHS
InformationsquelleAutor jhon.smith | 2013-09-13

1 Comentario

  1. 4

    Me gustaría evitar regex para analizar html. Aquí tienes una alternativa con la y mojolicious como analizador:

    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/
        })'

    Pero si insisten con , la expresión regular tiene algunos problemas. En primer lugar, los paréntesis deben ser escapado de hacer agrupación. Segundo, rdf/uni no es una coincidencia. En tercer lugar, cuando usted hace [^"]* se está evitando la extensión de rdf.gz. Cambio de ella para buscar un . y, a continuación, comprobar la extensión, pero recuerdo que es muy frágil. Podría fallar en muchas formas, por ejemplo con un archivo con una . en su nombre:

    curl -s "$site" --list-only | sed -n 's%.*href="\([^.]*\.rdf\.gz\)".*%\n%; ta; b; :a; s%.*\n%%; p'

    Ambos comandos rendimiento:

    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

Dejar respuesta

Please enter your comment!
Please enter your name here