Come Sostituire Testo in Batch da Shell con Sed

Pubblicato da Yuri Carlenzoli | 01 dicembre 2014

Ecco il semplice metodo che consente di sostituire in batch con la shell di Linux una stringa di testo in molti files contemporaneamente, solamente con un comando.

sed-sostituire-testo-batch-replace

L'aggiornamento di files può essere molto semplice e veloce ma a volte anche ripetitivo e noioso, sopratutto se si usa Linux e si hanno molti script, files testuali e magari anche codice di programmazione, solo per cambiare una riga od un pezzo di ogni files si potrebbe perdere molto tempo, grazie a SED, la shell ed un comando lo si può fare istantaneamente.

Come cercare e sostituire con sed da shell

Diversamente dallo script di sed per inserire testo sulle linee desiderate, anche se in particolari situazioni risulta più comodo, questo è un comando solo che permette di alterare il testo dei documenti o files testuali grazie a sed, il quale per eccellenza su Linux è il comando/programma di shell che permette di sostituire testo.

In pratica, senza far niente di particolare, solamente usando sed ed inserendo testo con lo stesso, utilizzando il suo semplice metodo che permette di definire il testo che dev'essere sostituito, che, in questo caso sono solo parti di testo scritte semplicemente, ovvero in questo articolo viene spiegato come farlo senza regex, e, selezionando molti files in base all'estensione anteponendo alla stessa una wildcard al posto del loro nome si potranno cambiare parti testuali dei files in batch su più files contemporaneamente.

Ad esempio, se ci si posiziona con la shell in una directory contenente files testuali con estensione .txt, se si volesse sostituire la parola "giallo" presente in tutti i files con "NON UN COLORE" basterà digitare:

sed -i 's,giallo,NON UN COLORE,g' *.txt

Cambiare i links da HTTP ad HTTPS in più files in una directory

Dopo un po di tempo dalla pubblicazione di questo articolo lo aggiorno con un argomento più da webmaster che da utilizzatori di Linux, ovvero il trasferimento di un sito web sul protocollo HTTPS.

Per configurare correttamente un sito web sul protocollo HTTPS infatti serve (anche) che i links a tutte le risorse del sito web risiedano sul protocollo HTTPS.

Quindi, non solamente chi ha un sito web in HTML puro, ma chi ad esempio ha inserito link assoluti al posto di funzioni in script di un CMS per eliminare query al database e quindi velocizzare il sito web.

Tramite il comando presente in questo articolo, se si devono cambiare URL da HTTP ad HTTPS in più files in una directory basterà:

  1. Portarsi nella directory contenente i files con il comando cd, ad esempio cd /home/webmaster/ per entrare nella directory "webmaster" presente nella directory "webmaster" che risiede nella directory "home";
  2. Digitare il comando sed -i 's/http/https/g' *.

Il video che mostra quanto è semplice:

A chi non ha linux dico anche che il comando è possibile darlo anche tramite SSH, se si hanno server Linux (la maggior parte) eviterà comunque di modificare manualmente molti files.

Concludo l'articolo dicendo solamente che, a differenza del metodo che permette di aggiungere parti di testo a files testuali anche in batch con sed, questo metodo lo trovo più idoneo per essere utilizzato per scopi non ripetitivi, quindi la creazione di script eseguibili che invocano il comando non è fondamentale.

Voi per cosa lo usate od userete sed per modificare files in batch?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Moderazione dei commenti attiva. Il tuo commento non apparirà immediatamente.