Estrarre una o piu’ righe da un file

Filed under: shell — olaolaonline 14 dicembre 2007 @ 12:53

Capita a volte di voler estrarre la n-esima riga da un file. Con il comando sed basta scrivere

sed -n ’5p;5q’ nomefile

per ottenere a schermo il contenuto della riga numero 5.

Se invece vogliamo estrarre piu’ righe continuative usiamo la sintassi

sed -n ’5,8p;8q’ nomefile

per estrarre dalla riga 5 alla riga 8 comprese.

La sintassi e’ abbastanza criptica, ma basta sapere che viene detto a sed di iniziare alla riga 5 e stampare fino alla riga 8, poi di finire il processamento sempre alla riga 8.

Invertire una stringa di testo

Filed under: shell — olaolaonline 3 dicembre 2007 @ 12:56

Forse non vi capita spesso, ma puo’ essere utile poter rovesciare una stringa di testo, e cioe’

Sono una stringa –> agnirts anu onoS

Bene allora basta usare il comando rev:

echo "Sono una stringa" | rev
agnirts anu onoS

Se invece il testo e’ contenuto in un file scrivete

rev file_con_testo
.elif nu ni ottircs eritrevni ad otseT
.agir avoun anu ‘e ‘atseuQ

Buon lavoro :)

Creare un file di log

Filed under: shell — olaolaonline 6 novembre 2007 @ 19:52

Quando si scrive una procedura per la shell e’ sempre bene fare in modo che venga creato un file di log contente tutte le informazioni importanti e le operazioni effettuate dalla procedura stessa. Per fare cio’ basterebbe reindirizzare l’output dello schermo su un file con il consueto simbolo di maggiore (>). In questo modo pero’ non vediamo piu’ a schermo quello che sta’ succedendo. Inoltre sarebbe comodo avere nel file di log l’indicazione della data e dell’ora a cui e’ avvenuto un verto evento.

Bene, attraverso l’uso combinato dei comandi date e tee possiamo scrivere una semplice funzione che fa’ al caso nostro.

logging (){
  dateTime=$(date "+%Y-%m-%d %H:%M:%S")
  if [[ -n $2 ]]
  then
    echo "$dateTime $1" | tee -a $2
  else
    echo "$dateTime $1 (no log file specified)"
  fi
}

La funzione va usata in questo modo

logging "Testo da scrivere nel log" nome_file_log.

Il primo argomento e’ obbligatorio e rappresenta l’informazione che volete scrivere nel file di log. Il secondo argomento e’ il nome del file di log in cui volete scrivere. Se tale file non viene specificato il testo viene scritto solo a schermo.

Il risultato sara’ della forma

2007-11-06 18:35:14 Testo da scrivere nel log

Al prossimo trick!

Masterizzare da riga di comando

Filed under: shell — olaolaonline 27 settembre 2007 @ 11:13

Perche’ utilizzare pesanti interfacce grafiche per masterizzare i vostri CD/DVD, quando potete farlo con due semplici comandi dati alla shell?

Prima creiamo l’immagine ISO della cartella da masterizzare

mkisofs -RJ -o nome_immagine cartella_da_masterizzare

fatto questo, masterizziamo l’immagine sul CD/DVD

cdrecord -v dev=1,0,0 speed=32 driveropts=burnfree -dao -eject nome_immagine.

Naturalmente potete cambiare le opzioni per adattarle alle vostre esigenze, come ad esempio la velocita’ di scrittura (speed).

Per scoprire il numero identificativo del vostro masterizzatore (in questo caso 1,0,0) potete usare il comando

cdrecord -scanbus.

Sostituire una stringa in un file

Filed under: shell — olaolaonline 11 settembre 2007 @ 10:45

Mi capita spesso di dover sostituire tutte le occorrenze di una certa stringa in uno o piu’ file. Bene, per il momento ho imparato a farlo in tre modi, per la verita’ molto simili tra loro. I comandi utilizzati sono sed, tr e il linguaggio perl.

Cominciamo con tr, la sintassi da utilizzare e’ la seguente

tr stringa_da stringa_a < file_da_elaborare

dove stringa_da rappresenta il testo da sostiutire, mentre stringa a e’ il nuovo testo. Notare il simbolo di redirezione “<”.

Per quanto riguarda il comando sed invece dobbiamo scrivere

sed ‘s/stringa_da/stringa_a/’ file_da_elaborare.

Infine, se vogliamo usare il linguaggio perl dobbiamo usare una sintassi molto simile a quella precedente

perl -pi -e ‘s/stringa_da/stringa_a/’ file_da_elaborare.

E’ utile far notare una cosa. Mentre per i primi due comandi, tr e sed, il risultato della sostituzione viene scritto a video, ed e’ quindi possibile reindirizzarlo in un ulteriore file, utilizzando il linguaggio perl le sostituzioni avvengono direttamente nel file di origine, il che puo’ essere piuttosto pericoloso.

Per contro, l’utilizzo del perl permette di agire su piu’ file contemporaneamento. Questo e’ possibile anche con sed, ma in questo caso di avra’ un solo output.

<<< Previous Page - Next Page >>>