Linux ed il testo – parte 3

Dopo aver visto come visualizzare i nostri testi e come compiere ricerche su di essi, vediamo come effettuare delle sostituzioni in maniera “semplice” e veloce.

Il comando che tratterò è: sed

Sed è uno stream editor dalle 1000 + 1 funzionalità, oggi mi concentrerò solo sulle trasformazioni del testo. Sed è utilissimo se dovete effettuare tante sostituzioni all’interno di un file molto grosso (quando dico molto intendo proprio MOOOLTO, io l’ho usato con file di testo da 500MB).

Vediamo come funziona:

Innanzitutto il comando per effettuare delle ricerche con sostituzioni è in questa forma:

sed ‘s/before/after/’ < in > out

  • s: sta per “sostituisci”
  • before: è la stringa da ricercare
  • after: è la stringa da inserire al posto della stringa originale
  • < in: indica il file di input (“<” indica che il file verrà preso in input da sed)
  • > out: indica il file di output (“>” indica che il file verrà utilizzato come output), se manca verrà scritto tutto a terminale
  • /: è un carattere utilizzato come separatore (si può utilizzare il carattere che si preferisce, basta che non compaia nelle stringhe before e after; se il carattere separatore appare anche nelle stringhe basta precederlo da “\”)

primo esempio:

sed ‘s/sole/luna/’ < in > out //tutte le volte che in “in” compare “sole” in “out” verrà scritto “luna”

le stringhe before e after possono essere più “furbe”, includendo espressioni regolari:

sed ‘s:[0-9]*:NUMERO:’ < in > out //tutti i numeri sono sostituiti da “NUMERO” (invece di / ho usato : come carattere separatore)

si può usare il carattere & per ricopiare la stringa trovata:

sed ‘s/[0-9]*/aaa&zzz/’ < in > out //ogni numero viene inserito all’interno di aaa e zzz

si possono memorizzare 9 parti distinte delle stringhe trovate per poterle utilizzare nella sostituzione:

sed ‘s/\([0-9]*\).[0-9]*/\1/’ < in > out //utilizzando “\(” e “\)” nella stringa da trovare si possono identificare le diverse parti, che poi possono essere utilizzate nella sostituzione indicandole con “\n” (dove “n” è sostituita da una cifra da 1 a 9) [nell’esempio viene ricopiata solo la parte intera dei numeri decimali]

Il grande vantaggio di sed è che analizza il testo come uno stream, quindi non necessita di aprire tutto il file prima di iniziare l’elaborazione, quindi risulta particolarmente veloce con file grossi (provate ad aprire con un editor normale questo file dopo averlo decompresso).

Per qualche info in più ecco una introduzione (in inglese) a sed.

EOF

3 pensieri su “Linux ed il testo – parte 3”

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...