Comando Sed o Stream Editor è un'utilità molto potente offerta dai sistemi Linux/Unix. Viene utilizzato principalmente per la sostituzione del testo , trova e sostituisci ma può anche eseguire altre manipolazioni del testo come inserimento , eliminazione , cerca ecc. Con SED possiamo modificare file completi senza doverli aprire. Sed supporta anche l'uso di espressioni regolari, il che rende sed uno strumento di manipolazione dei test ancora più potente .
In questo articolo impareremo ad usare il comando SED con l'aiuto di alcuni esempi. La sintassi di base per l'utilizzo del comando sed è,
sed OPTIONS… [SCRIPT] [INPUTFILE…]
Vediamo ora alcuni esempi.
Esempio :1) Visualizzazione del testo parziale di un file
Con sed, possiamo visualizzare solo una parte di un file invece di vedere il file intero. Per vedere alcune righe del file, usa il seguente comando,
[[email protected] ~]$ sed -n 22,29p testfile.txt
qui, l'opzione 'n' sopprime la stampa dell'intero file e l'opzione 'p' stamperà solo righe da 22 a 29.
Esempio :2) Visualizza tutto tranne alcune righe
Per visualizzare tutto il contenuto di un file tranne una parte, usa il comando seguente,
[[email protected] ~]$ sed 22,29d testfile.txt
L'opzione 'd' rimuoverà le righe menzionate dall'output.
Esempio :3) Visualizza ogni terza riga che inizia con l'ennesima riga
Visualizza il contenuto di ogni terza riga che inizia con la riga numero 2 o qualsiasi altra riga, usa il comando seguente
[[email protected] ~]$ sed -n '2~3p' file.txt
Esempio:4) Eliminazione di una riga utilizzando il comando sed
Per eliminare una riga con sed da un file, utilizzare il comando seguente,
[[email protected] ~]$ sed Nd testfile.txt
dove 'N' è il numero di riga e l'opzione 'd' cancellerà il numero di riga menzionato. Per eliminare l'ultima riga del file, usa
[[email protected] ~]$ sed $d testfile.txt
Esempio :5) Eliminazione di un intervallo di righe
Per eliminare un intervallo di righe dal file, esegui
[[email protected] ~]$ sed '29,34d' testfile.txt
Questo cancellerà le righe da 29 a 34 dal file testfile.txt.
Esempio :6) Eliminazione di righe diverse da quelle menzionate
Per eliminare righe diverse da quelle citate da un file, useremo '!'
[[email protected] ~]$ sed '29,34!d' testfile.txt
qui l'opzione '!' è utilizzata come non, quindi invertirà la condizione, ovvero non cancellerà le righe menzionate. Tutte le righe altre 29-34 verranno eliminate dai file testfile.txt.
Esempio:7) Aggiunta di righe/spazi vuoti
Per aggiungere una riga vuota dopo ogni riga non vuota, utilizzeremo l'opzione 'G',
[[email protected] ~]$ sed G testfile.txt
Esempio :8) Cerca e sostituisci una stringa usando sed
Per cercare e sostituire una stringa dal file, utilizzeremo il seguente esempio,
[[email protected] ~]$ sed 's/danger/safety/' testfile.txt
qui l'opzione "s" cercherà la parola "pericolo" e la sostituirà con "sicurezza" su ogni riga solo per la prima occorrenza.
Esempio :9) Cerca e sostituisci una stringa da un intero file usando sed
Per sostituire completamente la parola dal file, utilizzeremo l'opzione 'g' con 's',
[[email protected] ~]$ sed 's/danger/safety/g' testfile.txt
Esempio :10) Sostituisci l'ennesima occorrenza dello schema di stringa
Possiamo anche sostituire una stringa all'ennesima occorrenza da un file. Come sostituire "pericolo" con "sicurezza" solo alla seconda occorrenza,
[[email protected] ~]$ sed ‘s/danger/safety/2’ testfile.txt
Per sostituire "pericolo" alla seconda occorrenza di ogni riga dell'intero file, usa
[[email protected] ~]$ sed 's/danger/safety/2g' testfile.txt
Esempio :11) Sostituisci una stringa su una riga particolare
Per sostituire una stringa solo da una riga particolare, usa
[[email protected] ~]$ sed '4 s/danger/safety/' testfile.txt
Questo sostituirà solo la stringa dalla 4a riga del file. Possiamo anche citare un intervallo di righe invece di una singola riga,
[[email protected] ~]$ sed '4,9 s/danger/safety/' testfile.txt
Esempio :12) Aggiungi una riga dopo/prima della ricerca con corrispondenza
Per aggiungere una nuova riga con del contenuto dopo ogni corrispondenza di pattern, usa l'opzione 'a' ,
[[email protected] ~]$ sed '/danger/a "This is new line with text after match"' testfile.txt
Per aggiungere una nuova riga con del contenuto prima di ogni corrispondenza di pattern, usa l'opzione 'i',
[[email protected] ~]$ sed '/danger/i "This is new line with text before match" ' testfile.txt
Esempio :13) Modificare un'intera riga con motivo abbinato
Per cambiare un'intera riga in una nuova riga quando un modello di ricerca corrisponde, dobbiamo usare l'opzione 'c' con sed,
[[email protected] ~]$ sed '/danger/c "This will be the new line" ' testfile.txt
Quindi, quando il modello corrisponde a "pericolo", l'intera riga verrà modificata nella riga menzionata.
Opzioni avanzate con sed
Finora usavamo solo espressioni semplici con sed, ora discuteremo alcuni usi avanzati di sed con regex,
Esempio :14) Esecuzione di più comandi sed
Se dobbiamo eseguire più espressioni sed, possiamo usare l'opzione 'e' per concatenare i comandi sed,
[[email protected] ~]$ sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt
Esempio :15) Fare una copia di backup prima di modificare un file
Per creare una copia di backup di un file prima di modificarlo, usa l'opzione '-i.bak',
[[email protected] ~]$ sed -i.bak -e 's/danger/safety/g' testfile.txt
Questo creerà una copia di backup del file con estensione .bak. Puoi anche utilizzare un'altra estensione, se lo desideri.
Esempio:16) Elimina una riga di file che inizia con e termina con uno schema
Per eliminare una riga che inizia con una stringa particolare e termina con un'altra stringa, usa
[[email protected] ~]$ sed -e 's/^danger.*stops$//g' testfile.txt
Questo cancellerà la riga con "pericolo" all'inizio e "ferma" alla fine e può contenere un numero qualsiasi di parole tra , ".*" definisce quella parte.
Esempio :17) Righe aggiunte
Per aggiungere del contenuto prima di ogni riga con sed ®ex, usa
[[email protected] ~]$ sed -e 's/.*/testing sed &/' testfile.txt
Quindi ora ogni riga avrà prima "test sed".
Esempio:18) Rimozione di tutte le righe commentate e vuote
Per rimuovere tutte le righe commentate, ovvero le righe con # e tutte le righe vuote, usa
[[email protected] ~]$ sed -e 's/#.*//;/^$/d' testfile.txt
Per rimuovere solo le righe commentate, usa
[[email protected] ~]$ sed -e 's/#.*//' testfile.txt
Esempio :19) Ottieni l'elenco di tutti i nomi utente da /etc/passwd
Per ottenere l'elenco di tutti i nomi utente dal file /etc/passwd, usa
[[email protected] ~]$ sed 's/\([^:]*\).*/\1/' /etc/passwd
un elenco completo di tutti i nomi utente verrà generato sullo schermo come output.
Esempio :20) Impedisci la sovrascrittura dei collegamenti di sistema con il comando sed
È noto che il comando 'sed -i' rimuove i collegamenti di sistema e crea solo file regolari al posto del file di collegamento. Quindi, per evitare una situazione del genere e prevenire "sed -i ‘ dalla distruzione dei link, usa ‘–follow-symklinks ‘ opzioni con il comando in esecuzione.
Supponiamo che io voglia disabilitare SELinux su CentOS o server RHEL
[[email protected] ~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
Questi erano alcuni esempi per mostrare sed, possiamo usare questi riferimenti per impiegarli come e quando necessario. Se avete domande relative a questo o a qualsiasi articolo, condividete con noi.
Leggi anche : 14 esempi di comandi SCP per trasferire file in modo sicuro in Linux