GNU/Linux >> Linux Esercitazione >  >> Linux

Comando Linux sed:come utilizzare l'editor di flusso

Introduzione

SED è un editor di flussi di testo utilizzato sui sistemi Unix per modificare i file in modo rapido ed efficiente. Lo strumento ricerca, sostituisce, aggiunge ed elimina le righe in un file di testo senza aprire il file in un editor di testo.

Scopri come utilizzare il sed comando e le sue opzioni attraverso esempi facili da seguire.

Sintassi con Linux

La sintassi principale per l'utilizzo di Linux sed il comando è:

sed OPTIONS... [SCRIPT] [INPUTFILE...]

Opzioni Linux sed

Puoi eseguire sed con le seguenti opzioni della riga di comando:

-b , --binary Apri i file di input in modalità binaria per considerare che le righe finiscano con un avanzamento riga.
--debug Passa alla modalità debug per stampare l'input in forma canonica e annotare l'esecuzione del programma.
--follow-symlinks Modifica la destinazione finale se il file specificato è un collegamento simbolico. Funziona solo se combinato con -i opzione.
--help Visualizza le informazioni sull'utilizzo.
--i , --in-place [=SUFFIX] Esegui modifiche sul posto sovrascrivendo il file originale.
--posix Disabilita tutte le estensioni a POSIX sed per semplificare la scrittura di script portatili.
--version Mostra la versione di sed in esecuzione sul sistema.
-E , -r , --regexp-extended Utilizza espressioni regolari estese.
-e <em>script</em> , --expression=<em>script</em> Aggiungi uno script specifico da eseguire con i comandi.
-f <em>script-file</em> Aggiungi il contenuto di un file di script specificato da eseguire con i comandi.
-l <em>N</em> , --line-length=<em>N</em> Definisci la lunghezza di ritorno a capo desiderata per il l comando (il valore predefinito è 70).
-n , --quiet , --quiet Disabilita la stampa dell'output.
-s , --separate Visualizza i file specificati come separati, non come un unico lungo flusso continuo.
--sandbox Disabilita l'esecuzione di programmi esterni e opera solo sui file di input sulla riga di comando.
-u , --unbuffered Riduci al minimo il buffer di input e output.
-z , --null-data , --zero-terminated Visualizza l'input come un insieme di righe in cui ciascuna termina con un byte zero.

Esempi di Linux sed

Di seguito mostriamo dieci sed di uso comune comandi, esempi e sintassi.

Per questo tutorial, abbiamo creato un file di esempio con il nome foxinbox.tx t con il seguente contenuto:

Knox in box.
Fox in socks.

Knox on fox in socks in box.

Socks on Knox and Knox in box.
Fox in socks on box on Knox.

Nota che sed non influisce sul file di origine se non indicato. Al contrario, il comando visualizza le modifiche apportate dal comando specificato nel suo output.

Per sovrascrivere il file originale, utilizza il -i opzione per salvare le modifiche. Tuttavia, tale pratica non è consigliata prima di testare l'output del comando.

In alternativa, salva le modifiche in un file diverso (o nuovo). Reindirizza l'output aggiungendo > newfilename.txt alla fine del comando.

Sostituisci stringa usando il comando sed

Il sed di Linux comando è più comunemente usato per sostituire il testo. Cerca il modello specificato in un file e lo sostituisce con la stringa desiderata.

Per sostituire il testo utilizzando sed , usa il comando sostitutivo s e delimitatori (nella maggior parte dei casi, barre - / ) per separare i campi di testo.

Pertanto, la sintassi per la sostituzione del testo è:

sed 's/old_string/new_string/' filename.txt

Sostituisci old_string con il testo che vuoi sostituire e new_string con il testo in cui vuoi cambiarlo.

Ad esempio, per sostituire le istanze di box con la parola bin , esegui:

sed 's/box/bin/' foxinbox.txt

L'output mostra il testo con le parole sostituite, come nell'immagine sottostante.

Sostituisci tutte le occorrenze di String usando il comando sed

Per impostazione predefinita, sed sostituisce solo la prima occorrenza della stringa specificata in ogni riga. Cerca la prima istanza della parola specificata in una riga, la sostituisce e passa alla riga successiva.

Con più istanze della parola box nella stessa riga, il comando sostituisce solo il primo.

Se hai più istanze della stessa parola all'interno di una singola riga, aggiungi il g flag al comando per cambiarli tutti.

Il comando per sostituire ogni occorrenza di una determinata stringa all'interno di un testo è:

sed 's/old_string/new_string/g' filename.txt

Per sostituire la parola box con la parola bin nel file foxinbox.txt ogni volta, digita:

sed 's/box/bin/g' foxinbox.txt

L'output sopra mostra che il comando ha sostituito tutte le istanze della parola box .

Sostituisci una ricorrenza specifica in una riga usando il comando sed

Il sed Il comando consente di scegliere quale occorrenza di una stringa specificata si desidera sostituire all'interno di ogni riga. A tale scopo, aggiungi un contrassegno numerico come 1 , 2 , ecc.:

sed 's/old_string/new_string/#' filename.txt

Ad esempio, per sostituire la seconda occorrenza della parola box in ogni riga del testo con la parola bin , usa questo comando:

sed 's/box/bin/2' foxinbox.txt

Il comando ha saltato tre istanze della parola perché erano le prime della riga e ha sostituito solo quella alla fine.

Stampa solo righe con testo sostitutivo

Per impostazione predefinita, il sed comando stampa l'intero contenuto del file, insieme al testo sostitutivo nel suo output. Se hai molto testo e vuoi concentrarti sulle righe con le modifiche applicate, aggiungi gli attributi necessari al comando.

Per stampare solo le righe che hanno la sostituzione nelle condizioni date, usa la sintassi:

sed -n 's/old_string/new_string/p' filename.txt

Il -n l'opzione disabilita la stampa automatica, mentre il comando sostitutivo p indica sed per stampare le righe in cui avviene la sostituzione.

Puoi aggiungere il p comando ad altri comandi sostitutivi, come nell'esempio seguente:

sed -n 's/box/bin/2p' foxinbox.txt

Il comando sostituisce la seconda istanza della parola box in una riga e stampa la riga in cui è avvenuta la modifica. Nell'immagine qui sotto, vedi solo una riga con la sostituzione applicata.

Sostituisci stringa usando il comando sed e ignora maiuscole/minuscole

Per impostazione predefinita, il sed il comando fa distinzione tra maiuscole e minuscole. Ad esempio, il seguente contenuto contiene la parola fox con lettere iniziali maiuscole e minuscole:

Knox in box.
Fox in socks.

Knox on fox in socks in box.

Socks on Knox and Knox in box.
Fox in socks on box on Knox.

Per sostituire tutte le istanze della parola volpe , non eseguire il solito comando:

sed 's/fox/cow/' foxinbox.txt

Il risultato del comando cambia solo l'occorrenza della parola fox dove è interamente minuscolo:

Per ignorare le maiuscole e minuscole durante la sostituzione del testo, aggiungi il i sottocomando alla fine del comando:

sed 's/old_string/new_string/i' filename.txt

Da qui il comando per cambiare le istanze maiuscole e minuscole della parola fox nel testo sopra è:

sed 's/fox/cow/i' foxinbox.txt

L'output mostra che il comando ha modificato tutte e tre le istanze della stringa specificata.

Sostituisci stringa in una riga specifica usando il comando sed

Il sed Il comando consente di sostituire una stringa in una riga specifica aggiungendo il numero di riga come prefisso alle s sottocomando:

sed '# s/old_string/new_string/' filename.txt

Per testare questa funzione sull'esempio foxinbox.txt file, sostituisci la parola socks con sandals solo nella quarta riga (4 ) del testo utilizzando il comando:

sed '4 s/socks/sandals/' foxinbox.txt

L'output mostra che la prima istanza della parola socks nella seconda riga rimane la stessa, mentre la stessa parola è stata sostituita con sandals nella quarta riga.

Sostituisci stringa solo in un intervallo di righe specifico utilizzando il comando sed

Per sostituire più istanze di una stringa all'interno di un intervallo di righe, ma non l'intero testo, specifica l'intervallo in cui desideri sed sostituire. La sintassi è:

sed '#,# s/old_string/new_string/' filename.txt

Sostituisci il primo # con il numero di riga iniziale e il secondo # con l'ultimo numero di riga che desideri includere.

Ad esempio, per sostituire le ultime due istanze della parola calzini nel file foxinbox.txt (situato nella quarta e nella sesta riga) con la parola sandals , eseguiresti:

sed '4,6 s/socks/sandals/' foxinbox.txt

Elimina una riga specifica usando il comando sed

Per eliminare una riga da un file con sed comando, utilizzare il d sottocomando e la sintassi:

sed '#d' filename.txt

Specifica il numero di riga che desideri rimuovere al posto dell'hash (# ) ed eseguire il comando.

Ad esempio, per rimuovere la seconda riga da foxinbox.txt file, digita:

sed '2d' foxinbox.txt

Elimina le linee all'interno di un intervallo specifico di linee utilizzando il comando sed

Per eliminare più righe all'interno di un intervallo di righe utilizzando il sed comando, segui la sintassi:

sed '#,#d' filename.txt

Sostituisci i simboli hash con l'inizio e la fine dell'intervallo di righe. Ad esempio:

sed '2,4d' foxinbox.txt

Il comando sopra elimina le righe 2, 3 e 4 dal file.

Elimina dallo specifico all'ultima riga utilizzando il comando sed

Per eliminare le righe da un numero di riga specifico all'ultima riga, utilizzare il comando:

sed '#,$d' filename.txt

Cioè, rimuovere tutto dalla riga 3 alla fine di foxinbox.txt , esegui questo comando:

sed '3,$d' foxinbox.txt

Linux
  1. Come usare il comando sed di Linux

  2. Come usare il comando Linux grep

  3. Come usare il comando cronologia in Linux

  4. Come utilizzare il comando id in Linux

  5. Come utilizzare il comando "schermo" in Linux

Come utilizzare Nano, l'editor di testo della riga di comando di Linux

Come utilizzare il comando fd sul sistema Linux

Come utilizzare il comando wget in Linux?

Come usare il comando xargs in Linux?

Come utilizzare il comando RPM in Linux

Come utilizzare il comando which in Linux