Pagina 1 di 1

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

MessaggioInviato: gio dic 16, 2010 5:39 pm
da DjDiabolik
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 ?

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

MessaggioInviato: gio dic 16, 2010 6:19 pm
da gialloporpora
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

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

MessaggioInviato: gio dic 16, 2010 8:26 pm
da DjDiabolik
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...

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

MessaggioInviato: gio dic 16, 2010 8:39 pm
da DjDiabolik
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

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

MessaggioInviato: gio dic 16, 2010 8:46 pm
da gialloporpora
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

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

MessaggioInviato: gio dic 16, 2010 10:25 pm
da gialloporpora
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.

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

MessaggioInviato: ven dic 17, 2010 3:32 am
da DjDiabolik
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.

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

MessaggioInviato: ven dic 17, 2010 9:47 am
da gialloporpora
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

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

MessaggioInviato: ven dic 17, 2010 1:52 pm
da DjDiabolik
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 ?

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

MessaggioInviato: ven dic 17, 2010 3:05 pm
da DjDiabolik
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.

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

MessaggioInviato: ven dic 17, 2010 3:54 pm
da DjDiabolik
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 :)

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

MessaggioInviato: ven dic 17, 2010 4:32 pm
da DjDiabolik
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!