Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

BATCH. Tagliare parti da file .txt, Possibile? Linux lo fa?

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

BATCH. Tagliare parti da file .txt, Possibile? Linux lo fa?

Messaggioda DjDiabolik » gio dic 16, 2010 5:39 pm

perché chiedo se linux lo fa ?
Semplice perché in un batch che ho in mio possesso utilizzo già con successo 2 eseguibili di linux nella versione per Windows32 che per la cronaca sono il Grep e il Change.

Ora il mio dubbio è questo.
Ho un file .txt che contiene una roba simile:

Codice: Seleziona tutto
<td width="90" height="18" align="center" style="border-right: 1px solid #FFFFFF"><a href="qui_c'è_un_link_ad_un_file.zip"> <img border="0" src="images/download.gif" width="17" height="17"></a></td>


Io sto cercando un modo per risalire a quel link dello zip....... quindi avevo pensato ad un comando che magari possa tagliare il file .txt prima dal primo carattere fino magari alla stringa "<a href=" poi in secondo momento invece tagliare il finale dopo il ".zip" magari appunto cercando un'altra stringa.

Sapete aiutarmi ?
Avatar utente
DjDiabolik
Aficionado
Aficionado
 
Messaggi: 64
Iscritto il: sab feb 03, 2007 11:23 pm

Re: BATCH. Tagliare parti da file .txt, Possibile? Linux lo

Messaggioda gialloporpora » gio dic 16, 2010 6:19 pm

Io avevo fatto una cosa del genere usando sed (lo trovi dove hai scaricato il grep e gli altri), se ritrovo il mio file bat ti dico anche come si fa.

Ciao
Albert Einstein: « 10 cose sono infinite: l'universo e la stupidità umana ma sull'universo nutro ancora dubbi »
Avatar utente
gialloporpora
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 1780
Iscritto il: mer lug 27, 2005 11:55 pm

Re: BATCH. Tagliare parti da file .txt, Possibile? Linux lo

Messaggioda DjDiabolik » gio dic 16, 2010 8:26 pm

gialloporpora ha scritto:Io avevo fatto una cosa del genere usando sed (lo trovi dove hai scaricato il grep e gli altri), se ritrovo il mio file bat ti dico anche come si fa.

Ciao

il sed...... ricordo che m'è capitato davanti..... provo a ritrovarlo...
Avatar utente
DjDiabolik
Aficionado
Aficionado
 
Messaggi: 64
Iscritto il: sab feb 03, 2007 11:23 pm


Re: BATCH. Tagliare parti da file .txt, Possibile? Linux lo

Messaggioda DjDiabolik » gio dic 16, 2010 8:39 pm

Trovato qua:
Codice: Seleziona tutto
http://sourceforge.net/projects/gnuwin32/files/sed


L'Help però non mi è di grande aiuto...... non è spiegato niente in pratica:
Codice: Seleziona tutto
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
  -e script, --expression=script
                 add the script to the commands to be executed
  -f script-file, --file=script-file
                 add the contents of script-file to the commands to be executed
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if extension supplied)
  -b, --binary
                 open files in binary mode (CR+LFs are not processed specially)
  -c, --copy
                 use copy instead of rename when shuffling files in -i mode
       (avoids change of input file ownership)
  -l N, --line-length=N
                 specify the desired line-wrap length for the `l' command
  --posix
                 disable all GNU extensions.
  -r, --regexp-extended
                 use extended regular expressions in the script.
  -s, --separate
                 consider files as separate rather than as a single continuous
                 long stream.
  -u, --unbuffered
                 load minimal amounts of data from the input files and flush
                 the output buffers more often
      --help     display this help and exit
      --version  output version information and exit

If no -e, --expression, -f, or --file option is given, then the first
non-option argument is taken as the sed script to interpret.  All
remaining arguments are names of input files; if no input files are
specified, then the standard input is read.

GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-gnu-utils@gnu.org>.
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.

La documentazione che mi ha dato l'help del wget e del grep erano nettamente migliori
Avatar utente
DjDiabolik
Aficionado
Aficionado
 
Messaggi: 64
Iscritto il: sab feb 03, 2007 11:23 pm

Re: BATCH. Tagliare parti da file .txt, Possibile? Linux lo

Messaggioda gialloporpora » gio dic 16, 2010 8:46 pm

Sed lo trovi su GnuWin32, fra l'altro il file batch che scarica i pacchetti aggiornati fa grosso modo quello che vuoi tu, cioè fa il parsing della pagina di SourceForge per cercarsi le versioni più aggiornate :-)

Prova a creare un file di nome find.sed (o quel che vuoi) con queste righe:

Codice: Seleziona tutto
/<a href=\".*\.zip\"/{
    s/.*\"\(.*\.zip\)\".*/http\:\/\/.*\1/;
    p
 


e poi dai il comando:

Codice: Seleziona tutto
sed -n -f find.sed file_su_cui_cercare.txt



e ti dovrebbe apparire il link che vuoi (al limite raffina la regex se ne appaiono troppi).

Per farlo funzionare su un file bat salvi l'output di sopra in un file temporaneo ( > temp.txt) e poi parsi le righe con il FOR.

Ciao
Albert Einstein: « 10 cose sono infinite: l'universo e la stupidità umana ma sull'universo nutro ancora dubbi »
Avatar utente
gialloporpora
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 1780
Iscritto il: mer lug 27, 2005 11:55 pm

Re: BATCH. Tagliare parti da file .txt, Possibile? Linux lo

Messaggioda gialloporpora » gio dic 16, 2010 10:25 pm

Ti conviene usare questo codice per il file del find.sed che quello di sopra è sbagliato:
Codice: Seleziona tutto
/<a href=\".*\.zip\"/{
    s/.*\"\(.*\.zip\)\".*/\1/;
    p
 }



devo aver sbagliato il copia/incolla. Così trovi tutti i link a file zip, se devi usare qualcosa di più raffinato raffina la regex o fammi vedere il file completo da cui estrarre il link.



Se ritrovo i link devo avere alcune guide utili per imparare a usarlo, ora non mi ricorderei nemmeno troppo bene come utilizzarlo.
Albert Einstein: « 10 cose sono infinite: l'universo e la stupidità umana ma sull'universo nutro ancora dubbi »
Avatar utente
gialloporpora
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 1780
Iscritto il: mer lug 27, 2005 11:55 pm

Re: BATCH. Tagliare parti da file .txt, Possibile? Linux lo

Messaggioda DjDiabolik » ven dic 17, 2010 3:32 am

allora....... il codice che ho postato all'inizio.... in pratica è un file .txt che ha diverse righe come quelle...... tutte uguale che ad ogni riga riporta ad un file .zip :)

Certo è che il file con tutti i collegamenti è già estratto da una pagina con indice html... io usando il grep e il change mi sono estratto tutte le righe fino ad ottenere un file di testo con le sole righe dove sono linkati i .zip :)

Ora mi servirebbe solo togliere i tag html proprio per ottenere il solo link al file .zip :)

Effettivamente da quello che ho capito in pratica il sed va eseguito con uno script che è appunto scritto nel find.sed... c'è da capire come compilarlo poi sto script.

*EDIT*
comunque funziona....... per ora ti ringrazio..... se mi fai risalire anche alla guida su come compilare lo script ti ringrazio in anticipo.

Potrebbe servirmi in futuro.
Avatar utente
DjDiabolik
Aficionado
Aficionado
 
Messaggi: 64
Iscritto il: sab feb 03, 2007 11:23 pm

Re: BATCH. Tagliare parti da file .txt, Possibile? Linux lo

Messaggioda gialloporpora » ven dic 17, 2010 9:47 am

Ti dò qualche link:
http://www.gentoo.org/doc/it/articles/l-sed3.xml (questa è quella che ho letto io per imparare a usarlo)
http://natonelbronx.wordpress.com/2007/ ... -di-testi/

Qui trovi un bel po' di esempi:
http://www.unixguide.net/unix/sedoneliner.shtml


Quello che ti ho scritto io (spero di ricordarmi bene) funziona così:

Codice: Seleziona tutto
sed -n -f find.sed file da cercare.txt


l'opzione -n dice a sed di non stampare a video le riche che processa, se non la metti ti stampa a video tutte le righe (simile a quello che fa il type del DOS), -f gli dice di eseguire i comandi nel file find.sed, potresti anche fare tutto in una riga però essendoci dei " nel codice da processare te lo sconsiglio perché c'è un problema di parsing di quei caratteri del prompt dei comandi.

Nel file find sed ci sono questi comandi:

Codice: Seleziona tutto
/<a href=\".*\.zip\"/


dice di fermarsi quando trova una riga che contiene un link e di eseguire su di essa quello che c'è nelle parentesi graffe:

Codice: Seleziona tutto
s/.*\"\(.*\.zip\)\".*/\1/p


cioè di sostituire quella riga con il link (che è fra parentesi e viene ricordato). Il p finale dice a sed di stampare la riga a video (il -n aveva disattivato la stampa a video in precedenza), quindi per risultato hai che stampa tutti i link a file zip che trova.
Ciao
Albert Einstein: « 10 cose sono infinite: l'universo e la stupidità umana ma sull'universo nutro ancora dubbi »
Avatar utente
gialloporpora
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 1780
Iscritto il: mer lug 27, 2005 11:55 pm

Re: BATCH. Tagliare parti da file .txt, Possibile? Linux lo

Messaggioda DjDiabolik » ven dic 17, 2010 1:52 pm

Codice: Seleziona tutto
/<a href=\".*\.zip\"/

Questo un po' m'è chiaro.....
In pratica le 2 "/" iniziale e finale indicano la fine della stringa giusto ?
poi c'è "<a href=" e una "\"....questa "\" indica qualcos'altro ? Oppure sta li ad indicare la "/" presente nel file iniziale che era "<a href=/" ?

Magari quella "\" è un semplice separatore..... quindi cosa significa "\".*\" ?

Poi c'è la seconda .zip.. che è il secondo termine giusto ?

Codice: Seleziona tutto
s/.*\"\(.*\.zip\)\".*/\1/p

Questo è arabo!
Ho cercato anche io un po' di guide del comando sed... e anche io avevo visto che il "s/" sta per sostituisci.... poi tutto il resto ??

Se puoi cerca di separarmelo tipo per comando e termine di ricerca perché mica ho capito che vai a sostituire tu ?
Avatar utente
DjDiabolik
Aficionado
Aficionado
 
Messaggi: 64
Iscritto il: sab feb 03, 2007 11:23 pm

Re: BATCH. Tagliare parti da file .txt, Possibile? Linux lo

Messaggioda DjDiabolik » ven dic 17, 2010 3:05 pm

scusami se te lo dico ma tutte le guide sono inutili.

Tutti gli esempi se li rifai col la versione di windows non vanno..... a mio avviso è totalmente diversa come gestisce i comandi e non funziona niente.

Continua a dire uknow command.. unknow command.

Quindi come fai a capire come che funziona se il comando va formulato in maniera totalmente diversa ?

Per imparare bene com'è che funziona devo per forza avere sotto mano qualche esempio dell'utilizzo del sed per windows altrimenti posso diventare scemo.
Avatar utente
DjDiabolik
Aficionado
Aficionado
 
Messaggi: 64
Iscritto il: sab feb 03, 2007 11:23 pm

Re: BATCH. Tagliare parti da file .txt, Possibile? Linux lo

Messaggioda DjDiabolik » ven dic 17, 2010 3:54 pm

Codice: Seleziona tutto
http://downloads.sourceforge.net/project/gnuwin32/sed/4.2-1/sed-4.2-1-doc.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fgnuwin32%2Ffiles%2Fsed%2F4.2-1%2Fsed-4.2-1-doc.zip%2Fdownload%3Fuse_mirror%3Dpuzzle&ts=1292597474&use_mirror=surfnet


Trovata la documentazione ufficile del sed in versione Gnuwin32... magari qua posso finalmente riuscire a capirci qualcosa :)
Avatar utente
DjDiabolik
Aficionado
Aficionado
 
Messaggi: 64
Iscritto il: sab feb 03, 2007 11:23 pm

Re: BATCH. Tagliare parti da file .txt, Possibile? Linux lo

Messaggioda DjDiabolik » ven dic 17, 2010 4:32 pm

Anche leggendo la documentazione ufficiale non si capisce una cippa!

E scritta a cavolo a mio avviso........... che mettessero per bene le varie stringhe come bisogna usarle ecc. ecc.

E' spiegata una cosa.. poi passano un'altra e non dicono con cosa usarla.

Insomma..... una guida per bene non esiste!
Avatar utente
DjDiabolik
Aficionado
Aficionado
 
Messaggi: 64
Iscritto il: sab feb 03, 2007 11:23 pm


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising