Introduzione all'uso di sed
Pagina 1 di 1
Introduzione all'uso di sed
Sed sta per Stream EDitor (editor in linea) ed infatti ha la struttura di un editor di testo, con caratteristiche estremamente particolari:
- filtra l'input di un file (o un pipe).
- Non richiede l'editing dell'utente (non esiste "Apri con sed" e "Salva").
- La sua sintassi non definisce un out-put.
- L'input di default non viene modificato.
Lette queste caratteristiche, sembrerebbe che sed sia un'applicazione totalmente inutile; nella realtà è fondamentale nella trattazione di file di testo in maniera automatica.
Iniziamo creando un file di esempio con un po' di righe...
La sintassi di sed è la seguente:
sed [opzioni] [script-usato] [input]
cioè sed si aspetta un qualche script racchiuso tra apici e se non viene dato, prova a leggerlo dall'input. Infatti...
Trucchetto inutile: si può imbrogliare? Certo...basta mandarlo "a vuoto"...
$ sed '' prova
Questa e' la prima riga
questa e' la seconda
questa (terza) la chiamo Pippo
questa e' la quarta
questa (quinta) si chiama Pluto
questa (sesta) e' l'ultima
molto inutile xD
Cosa possiamo fare con questi script per sed?
Possiamo trattare il nostro file tramite le comuni espressioni regolari (regexp), cercare qualcosa in un file oppure fare sostituzioni.
Quando sed cerca un'espressione, produce in output le righe dell'input e quindi la riga con l'espressione, cosa che può risultare poco piacevole...
Ad esempio possiamo suddividere il file "prova" in due file "prova1" e "prova2" di tre righe ciascuno.
E' da notare come avremmo potuto avere lo stesso risultato con le espressioni regolari:
$ sed -n '^,3p' prova
$ sed -n '4,$p' prova
"^" indica l'inizio del file, "$" la fine.
Le sostituzioni sono la caratteristica più usata di sed, che ovviamente legge il contenuto del file tramite un insieme di regexp.
Ad esempio il mio file di prova andrebbe scritto un po' più correttamente, con il punto a fine riga e la "Q" su "questa"...
All'interno degli apici, "s" sta per "substitution" e la "g" finale sta per "global", il simbolo "$" lo conosciamo ^^
Questo è ovviamente uno sguardo iniziale molto superficiale all'uso di sed, per approfondimenti il solito "man sed" può darvi ulteriori delucidazioni. Ovviamente è importante l'utilizzo congiunto di sed con altre utili applicazioni (awk ad esempio...)
Per concludere, un semplice e simpatico esempio:
- filtra l'input di un file (o un pipe).
- Non richiede l'editing dell'utente (non esiste "Apri con sed" e "Salva").
- La sua sintassi non definisce un out-put.
- L'input di default non viene modificato.
Lette queste caratteristiche, sembrerebbe che sed sia un'applicazione totalmente inutile; nella realtà è fondamentale nella trattazione di file di testo in maniera automatica.
Iniziamo creando un file di esempio con un po' di righe...
- Codice:
$ echo -e "Questa e' la prima riga\nquesta e' la seconda\nquesta (terza) la chiamo Pippo\nquesta e' la quarta\nquesta (quinta) si chiama Pluto\nquesta (sesta) e' l'ultima" > prova
- Codice:
$ cat prova
Questa e' la prima riga
questa e' la seconda
questa (terza) la chiamo Pippo
questa e' la quarta
questa (quinta) si chiama Pluto
questa (sesta) e' l'ultima
La sintassi di sed è la seguente:
sed [opzioni] [script-usato] [input]
cioè sed si aspetta un qualche script racchiuso tra apici e se non viene dato, prova a leggerlo dall'input. Infatti...
- Codice:
$ sed prova
sed: espressione -e #1, carattere 2: ci sono altri caratteri dopo il comando
Trucchetto inutile: si può imbrogliare? Certo...basta mandarlo "a vuoto"...
$ sed '' prova
Questa e' la prima riga
questa e' la seconda
questa (terza) la chiamo Pippo
questa e' la quarta
questa (quinta) si chiama Pluto
questa (sesta) e' l'ultima
molto inutile xD
Cosa possiamo fare con questi script per sed?
Possiamo trattare il nostro file tramite le comuni espressioni regolari (regexp), cercare qualcosa in un file oppure fare sostituzioni.
Quando sed cerca un'espressione, produce in output le righe dell'input e quindi la riga con l'espressione, cosa che può risultare poco piacevole...
- Codice:
$ sed '/questa/p' prova
Questa e' la prima riga
questa e' la seconda
questa e' la seconda
questa (terza) la chiamo Pippo
questa (terza) la chiamo Pippo
questa e' la quarta
questa e' la quarta
questa (quinta) si chiama Pluto
questa (quinta) si chiama Pluto
questa (sesta) e' l'ultima
questa (sesta) e' l'ultima
- Codice:
$ sed -n '/questa/p' prova
questa e' la seconda
questa (terza) la chiamo Pippo
questa e' la quarta
questa (quinta) si chiama Pluto
questa (sesta) e' l'ultima
Ad esempio possiamo suddividere il file "prova" in due file "prova1" e "prova2" di tre righe ciascuno.
- Codice:
$ sed -n '1,3p' prova
Questa e' la prima riga
questa e' la seconda
questa (terza) la chiamo Pippo
$ sed -n '4,6p' prova
questa e' la quarta
questa (quinta) si chiama Pluto
questa (sesta) e' l'ultima
E' da notare come avremmo potuto avere lo stesso risultato con le espressioni regolari:
$ sed -n '^,3p' prova
$ sed -n '4,$p' prova
"^" indica l'inizio del file, "$" la fine.
Le sostituzioni sono la caratteristica più usata di sed, che ovviamente legge il contenuto del file tramite un insieme di regexp.
Ad esempio il mio file di prova andrebbe scritto un po' più correttamente, con il punto a fine riga e la "Q" su "questa"...
- Codice:
$ sed -e 's/$/./g' -e 's/questa/Questa/g' prova
Questa e' la prima riga.
Questa e' la seconda.
Questa (terza) la chiamo Pippo.
Questa e' la quarta.
Questa (quinta) si chiama Pluto.
Questa (sesta) e' l'ultima.
All'interno degli apici, "s" sta per "substitution" e la "g" finale sta per "global", il simbolo "$" lo conosciamo ^^
Questo è ovviamente uno sguardo iniziale molto superficiale all'uso di sed, per approfondimenti il solito "man sed" può darvi ulteriori delucidazioni. Ovviamente è importante l'utilizzo congiunto di sed con altre utili applicazioni (awk ad esempio...)
Per concludere, un semplice e simpatico esempio:
- Codice:
$ echo -e "<html>\n<head></head>\n<body>" > prova.html
$ sed -e 's/^/\t<br>/g' prova >> prova.html
$ echo -e "</body>\n</html>" >> prova.html
$ cat prova.html
<html>
<head></head>
<body>
<br>Questa e' la prima riga
<br>questa e' la seconda
<br>questa (terza) la chiamo Pippo
<br>questa e' la quarta
<br>questa (quinta) si chiama Pluto
<br>questa (sesta) e' l'ultima
</body>
</html>
Pagina 1 di 1
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.