Categories: HardwareSoftware

sed, cos’è il comando Linux per l’editing di testi, utile anche in Windows

Author: IlSoftware

Chi utilizza una distribuzione Linux e in generale un sistema operativo Unix-like può avvantaggiarsi dei servigi di sed, un potente strumento per la manipolazione del testo che risulta particolarmente utile in molteplici contesti. Il comando può essere utilizzato per sostituire del testo, eliminare righe e svolgere altre operazioni in modo automatizzato. Se state cercando una specifica stringa di caratteri in un file, anche di ampie dimensioni, e volete sostituirla con qualcos’altro, sed è lo strumento da usare. Anche se le sue abilità non si fermano certo qui.

Cos’è sed e come funziona

L’appellativo sed è abbreviazione di stream editor: si tratta di un’utilità a riga di comando che si rivela utilissima in molteplici occasioni. Vi abbiamo già detto della difficoltà di molti editor di testo con i file di grandi dimensioni, no? Il comando sed si comporta come una sorta di regista: le righe di testo sono gli attori, le istruzioni fornite dall’utente la sceneggiatura.

La specialità di sed risiede, come abbiamo già evidenziato, nella sostituzione delle parole e quindi nella trasformazione di stringhe. Dalla semplice sostituzione di una stringa in tutto il testo all’eliminazione delle linee vuote, sed si adatta a qualsiasi ruolo. Parla un linguaggio proprio, un misto di comandi imperativi ed espressioni regolari.

Il comando sed può anche “viaggiare nel tempo”, consentendo la creazione di copie di sicurezza e facilitandone il ripristino, in modo da mettere l’utente nelle condizioni di ripristinare il contenuto di qualsiasi file in caso di problemi o errori.

Perché sed è utile anche in Windows

Purtroppo, i sistemi operativi Windows non integrano un comando potente tano quanto sed. C’è findstr ma esso si limita a esaminare una singola riga mentre PowerShell offre la cmdlet Get-Content e l’espressione -replace ma in entrambi i casi è necessari ingegnarsi con l’utilizzo di appositi batch e script.

Attivando WSL (Windows Subsystem for Linux) su Windows 10 e Windows 11, è possibile usare Linux in Windows beneficiando di una perfetta integrazione con il sistema operativo Microsoft.

Installando ad esempio Ubuntu in WSL (o qualunque altra distribuzione Linux), si ha la possibilità di accedere al comando sed anche da Windows. Premendo Windows+R, digitando WSL$ quindi portandosi nella directory home del proprio account utente Linux, si possono copiare file di testo da elaborare dalla finestra di WSL con il comando sed.

Esempi di utilizzo del comando sed

Il miglior modo per apprendere come funziona un comando è partire da esempi concreti. L’istruzione seguente consente di sostituire tutte le occorrenze di stringaA con stringaB:

sed -i 's/stringaA/stringaB/g' file.txt

Al posto di stringaA con stringaB: vanno ovviamente indicate le parole da sostituire nel file file.txt. L’opzione -i indica a sed di modificare il file di testo direttamente, senza creare un file di backup. Gli interventi sono quindi apportati sul contenuto dell’oggetto chiamato file.txt e memorizzato nella cartella in cui ci si trova.

Supponiamo di prendere il testo dei Promessi Sposi e salvarlo come file di testo: si tratta di un file che pesa circa 1,2 MB e contiene poco meno di 3.000 righe. Digitando quanto segue, sed crea un nuovo file (notare l’assenza dell’opzione -i) con il nome Renzo sostituito da Mario:

sed 's/Renzo/Mario/g' promessi-sposi.txt > promessi-sposi-modificato.txt

Nel file di testo promessi-sposi-modificato.txt, Renzo Tramaglino è diventato Mario Tramaglino. Il buon Manzoni ci scuserà.

Nel caso in cui si volessero effettuare le opportune sostituzioni senza considerare la differenza tra lettere maiuscole e minuscole, è sufficiente utilizzare la sintassi gi nel comando:

sed -i 's/stringadatrovare/stringadasostituire/gi' file.txt

Nello specifico:

  • g: Sta per “global” e indica di effettuare la sostituzione in modo globale all’interno di ogni riga.
  • i: Sta per “case-insensitive” (senza distinzione tra maiuscole e minuscole). Questo significa che la sostituzione sarà insensibile alle differenze tra maiuscole e minuscole.

Come sostituire il testo che si trova su righe specifiche

Negli esempi precedenti, abbiamo visto come effettuare delle sostituzioni automatiche sull’intero contenuto di un file di testo. Il comando che segue fa in modo che sed prenda in considerazione solo il contenuto delle righe dalla numero 50 alla numero 150: l’intervallo è ovviamente personalizzabile a proprio piacimento.

sed -i '50,150s/stringadatrovare/stringadasostituire/g' file.txt

Inserire del testo dopo una certa riga

Il comando sed è come un “coltellino svizzero”: si adatta a ogni necessità legata alla gestione dei file di testo. Senza dover aprire alcun editor, è possibile chiedere a sed di aggiungere un testo dopo una certa riga. Per farlo, basta digitare quanto segue:

sed -i '50i3rd line' file.txt

La parte dell’istruzione 50i indica che si desidera importare nel file di testo quanto specificato dopo la barra, subito al di sopra della riga numero 50.

Estrarre il contenuto di alcune righe del file di testo

Spesso si ha a che fare con file di testo di grandi dimensioni. Può risultare complesso estrarre il contenuto di righe di testo specifiche o, addirittura, individuare le sole righe di testo che contengono stringhe specifiche.

Se riprendiamo il testo dei Promessi Sposi, quanto di seguito consente di estrarre il contenuto delle sole righe 1000-1010:

sed -n '1000,1010p' promessi-sposi.txt

Il comando seguente, invece, consente di estrarre e visualizzare le sole righe che contengono le stringhe Renzo o Lucia:

sed -n '/Renzo|Lucia/p' promessi-sposi.txt

Quanto rappresentato tra virgolette, è un’espressione regolare che corrisponde a tutte le righe che contengono la stringa “Renzo” o “Lucia”. L’operatore | funziona come un operatore logico OR.

Eliminare tutte le righe che contengono una stringa

Allo stesso modo, sed '100,110d' file.text > nuovo-file.txt consente di eliminare le righe da 100 a 110 creando un nuovo file di testo mentre il comando che segue permette di cancellare tutte le righe che contengono la stringa di caratteri indicata:

sed -i '/stringa/d' file.txt

È sempre bene porre la massima attenzione all’utilizzo dell’opzione -i che, come spiegato, applica le modifiche direttamente sul file di testo originale, senza creare copie di backup.

Per eliminare le righe vuote da un file di testo, invece, si può usare l’istruzione seguente: sed '/^$/d' file.txt

Come aggiungere nuove informazioni alla fine di un file

Quando si lavora con i file di testo, può essere utile aggiungere nuove righe senza aprire un editor “ad hoc”. Ciò risulta utile soprattutto con i file di configurazione di grandi dimensioni.

Il semplice comando sed -i '$anuova riga da aggiungere' file.txt consente di aggiungere una nuova riga alla fine del file mentre ad esempio sed '15anuova riga da aggiungere' file.txt effettua l’aggiunta dopo la 15esima riga.

admin

Recent Posts

Il Samsung Galaxy Fold6 Slim è pronto per sfidare Xiaomi

Author: Tom's Hardware Il settore degli smartphone pieghevoli si sta preparando per alcuni importanti aggiornamenti,…

7 Luglio 2024

Perché iRacing è l’unico VERO simulatore di corse automobilistiche sul mercato

Author: GAMEmag iRacing è spesso considerato un colosso nel settore delle simulazioni automobilistiche, distinguendosi per…

7 Luglio 2024

Il porting dei giochi macOS su iOS è molto più semplice grazie ad Apple Game Porting Toolkit 2 | AGEMOBILE

Author: Agemobile Apple lo scorso anno ha introdotto un nuovo Game Porting Toolkit per aiutare…

7 Luglio 2024

5 falsi miti su Linux: non ci credete | IlSoftware.it

Author: IlSoftware Linux ha guadagnato popolarità negli ultimi decenni, specialmente tra sviluppatori, amministratori di sistema…

7 Luglio 2024

Soffiatori per giardino (e non solo): ecco quelli in offerta e come scegliere il più adatto

Author: Hardware Upgrade Guardate con invidia il vicino con il soffiatore per pulire il giardino…

7 Luglio 2024

Halloween-Special von „LOL“: Lachen die Kaulitz-Zwillinge mit?

Author: klatsch-tratsch Bill (l.) und Tom Kaulitz sind angeblich zwei der Promis eines geplanten "LOL"-Specials.…

7 Luglio 2024