Tag: shell

  • [Tip] Esportare la wishlist di IBS

    Ecco il risultato di un piccolo esercizio di stile di shell programming messo a punto per risolvere un problema a Lawrence, un mio contatto su Friendfeed.

    C’è modo di esportare la wishlist di IBS verso Amazon oppure Anobii?

    In effetti IBS non consente alcun tipo di esportazione dei libri messi nella lista dei desideri, e si potrebbe essere portati ad rispondere “No” alla domanda, ma una breve analisi visiva/CTRL-F ai sorgenti della pagina mi hanno dato qualche speranza, ed ho intensificato le ricerche salvandola in locale ed sottoponendola a qualche tool da riga di comando. La prima cosa che mi è saltata all’occhio è stata la scarsa eleganza del codice generato, ed ho passato il file .html a tidy, un potente strumento per la validazione e la correzione del codice [X]HTML, in modo da renderlo più leggibile; poi ho individuato le parti più “interessanti” relativamente alla soluzione del problema, e cioè questo testo:

    http://www.ibs.it/ser/serdsp.asp?isbn=9788874241590

    che contiene appunto il codice ISBN di uno dei libri presenti nella wishlist.
    Sono quindi passato a grep, costruendo man mano la stringa di ricerca fino ad ottenere un risultato più o meno pulito, tipo questo:

    http://www.ibs.it/ser/serdsp.asp?isbn=9788874241590"
    http://www.ibs.it/ser/serdsp.asp?isbn=9788874241590"

    La presenza della doppia linea non è un errore di scrittura nel post, ci sono realmente due linee del genere per ogni libro nella wishlist. Dopo grep ho chiamato in causa sed per ripulire l’output ed ottenere solo l’elenco dei codici ISBN, la soluzione al problema, facendogli eseguire due cose in successione:

    sed -e 's/[^0-9]*//g'

    con questa chiamata cancello tutto ciò che non è numerico, mentre con

    sed -n 'p;n'

    stampo in output solamente le linee dispari.
    Et voilà, ecco la riga di comando completa:

    tidy -f errs.txt -imu lista.html; grep '."http://www.ibs.it/ser/serdsp.asp?isbn=[0-9]\{13\}' lista.html | sed -e 's/[^0-9]*//g' | sed -n 'p;n'

    Leggendo il codice si nota la presenza del file lista.html, che corrisponde alla pagina della wishlist salvata in locale: utilizzando questa accortezza ed eseguendo la riga di comando nella medesima directory contenente il file si ottiene in output l’agognato elenco di codici ISBN pronto per essere copiaincollato in Anobii. Sono convinto che il codice possa essere ottimizzato ma, come confermatomi da Lawrence, già in questo modo è pienamente funzionante.

    Happy coding

    [tags]shell, linux, internetbookshop, ibs[/tags]

  • Giocando con la bash

    Oggi ho avuto l’esigenza di ottenere in formato esadecimale le dimensioni dei files contenuti in una cartella.
    Stanco di effettuare copia e incolla tra la calcolatrice e la shell, ho deciso di farmi dire tutto da questa ultima.
    Nel giro di un quarto d’ora, giusto il tempo di leggere le varie manpages, ecco cosa ho tirato fuori.

    Partenza

    $ ls -l images/*
    totale 12952
    -rw-r--r-- 1 massi massi 11117611 2007-07-25 11:28 ramdisk.gz
    -rwxr-xr-x 1 massi massi 193336 2007-07-25 10:43 redboot.bin
    -rwxr-xr-x 1 massi massi 1930140 2007-07-25 10:41 zImage

    Troppi dati, li limito con [tag]awk[/tag]

    $ ls -l images/* | awk '{print $5}'

    11117611
    193336
    1930140

    Ora ho i dati cercati, ma c’e’ una riga bianca di troppo: chiedo aiuto a [tag]tail[/tag]

    $ ls -l images/* | tail -n +2 | awk '{print $5}'
    11117611
    193336
    1930140

    Ok, la riga e’ sparita. Ora basta giocare un po’ con i campi di awk

    $ ls -l images/* | tail -n +2 | awk '{printf("%s: %s(dec) %x(hex)\n", $8 ,$5 , $5)}'
    ramdisk.gz: 11117611(dec) a9a42b(hex)
    redboot.bin: 193336(dec) 2f338(hex)
    zImage: 1930140(dec) 1d739c(hex)

    Fatto!

    Alla prox

    [tags]bash[/tags]