GNU/Linux >> Linux Esercitazione >  >> Linux

Impara a usare l'editor di testo Sed

Creato per la versione 7 del sistema operativo Unix originale di AT&T, il sed comando è stato incluso probabilmente con tutti i sistemi operativi Unix e Linux da allora. Il sed l'applicazione è un editor di stream e, a differenza di un editor di testo, non apre un buffer visivo in cui vengono caricati i dati di un file per l'elaborazione. Invece, opera su un file, riga per riga, secondo un comando digitato in un terminale o una serie di comandi in uno script.

Installazione

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Se stai usando Linux, BSD o macOS, allora hai già GNU o BSD sed installato. Si tratta di due reimplementazioni uniche dell'originale sed comando e, sebbene siano simili, possono esserci differenze minori. GNU sed è generalmente considerato il sed più ricco di funzionalità là fuori ed è ampiamente disponibile su qualsiasi di queste piattaforme.

Se non riesci a trovare GNU sed (spesso chiamato gsed su sistemi non Linux), quindi puoi scaricarne il codice sorgente dal sito Web GNU. La cosa bella di avere GNU sed installato è che può essere utilizzato per le sue funzioni extra, ma può anche essere vincolato per conformarsi solo alle specifiche POSIX di sed , se hai bisogno della portabilità.

Su Windows, puoi installare GNU sed con Cioccolato.

Come funziona Sed

Il sed l'applicazione funziona su una riga alla volta. Poiché non ha una visualizzazione visiva, crea uno spazio modello, uno spazio in memoria contenente la riga corrente dal flusso di input (con qualsiasi carattere di nuova riga finale rimosso). Una volta che lo spazio del modello è popolato, le tue istruzioni per sed vengono eseguiti. A volte i tuoi comandi sono condizionali, altre volte sono assoluti, quindi i risultati di questi comandi dipendono da come stai usando sed .

Quando viene raggiunta la fine dei comandi, sed stampa il contenuto dello spazio del modello nel flusso di output. Il flusso di output predefinito è stdout , ma può essere reindirizzato a un file o anche di nuovo nello stesso file utilizzando il --in-place=.bak opzione.

Quindi il ciclo ricomincia con la riga di input successiva.

La sintassi per sed il comando è:

$ sed --options [optional SCRIPT] [INPUT FILE or STREAM]

Trovare ciò che desideri modificare

In un editor visivo, di solito trovi ciò che vuoi modificare in un file di testo senza pensarci troppo. L'occhio (o l'utilità per la lettura dello schermo) esegue la scansione del testo, trova la parola che si desidera modificare o il punto in cui si desidera inserire o rimuovere il testo, quindi si inizia a digitare. Non esiste una modalità interattiva per sed , tuttavia, quindi devi dirgli quali condizioni devono essere soddisfatte affinché esegua comandi specifici.

Per questi esempi, supponi che un file chiamato example.txt contiene questo testo:

hello
world
This is line three.
Here is the final line.

Numero riga

Specificare un numero di riga dice a sed per operare solo su quella riga specifica nel file.

Ad esempio, questo comando seleziona la riga 1 di un file e la stampa. Perché sed L'azione predefinita di ' dopo l'elaborazione è anche stampare una riga su stdout , questo ha l'effetto di duplicare la prima riga:

$ sed ‘1p’ example.txt
hello
hello
world
This is line three.
Here is the final line.

Puoi anche specificare i numeri di riga nei passaggi. Ad esempio, 1~2 indica che ogni 2 righe sono selezionate ("seleziona ogni seconda riga che inizia con la prima"). L'istruzione 1~3 significa selezionare ogni terza riga dopo la prima:

$ sed ‘1p’ example.txt
hello
hello
world
This is line three.
Here is the final line.
Here is the final line.

Posizione della linea

Puoi operare solo sull'ultima riga di un file utilizzando $ come selettore:

$ sed ‘$p’ example.txt
hello
world
This is line three.
Here is the final line.
Here is the final line.

In GNU sed , puoi selezionare più di una riga (sed '1,$p' stampa la prima e l'ultima riga, ad esempio).

Negazione

Qualsiasi selezione per numero o posizione, puoi invertire con il punto esclamativo (! ) carattere. Questo seleziona tutte le righe tranne la prima riga:

$ sed ‘1!p’ example.txt
hello
world
world
This is line three.
This is line three.
Here is the final line.
Here is the final line.

Corrispondenza del modello

Puoi pensare a una corrispondenza di pattern come a un trova operazione in un elaboratore di testi o in un browser. Fornisci una parola (un modello ), e i risultati vengono selezionati. La sintassi per una corrispondenza di pattern è /pattern/ .

$ sed ‘/hello/p’ example.txt
hello
hello
world
This is line three.
Here is the final line.
$ sed ‘/line/p’ example.txt
hello
world
This is line three.
This is line three.
Here is the final line.
Here is the final line.

Modifica con Sed

Una volta trovato ciò che desideri modificare, puoi eseguire qualsiasi azione desideri. Esegui le modifiche con sed con i comandi. Comandi in sed sono diversi da sed comando stesso. Se può essere d'aiuto, pensali come "azioni" o "verbi" o "istruzioni".

Comandi in sed sono lettere singole, come il p per stampa comando utilizzato negli esempi precedenti. All'inizio possono essere difficili da ricordare, ma come per ogni cosa, li conosci con la pratica.

p per la stampa

Il p l'istruzione stampa tutto ciò che è attualmente contenuto nello spazio del modello.

d per eliminare

Il d l'istruzione elimina lo spazio del modello.

$ sed ‘$d’ example.txt
hello
world
This is line three.
$ sed ‘1d’ example.txt
world
This is line three.
Here is the final line.

s per la ricerca e la sostituzione

s comando cerca un modello e lo sostituisce con qualcos'altro. Questo è probabilmente l'uso più popolare e occasionale di sed , e spesso è il primo (e talvolta l'unico) sed comando che un utente impara. È quasi sicuramente il comando più utile per la modifica del testo.

$ sed ‘s/world/opensource.com/’
hello
opensource.com
This is line three.
Here is the final line.

Ci sono anche funzioni speciali che puoi usare nel tuo testo sostitutivo. Ad esempio, \L trasforma il testo sostitutivo in minuscolo e \l fa lo stesso solo per il personaggio successivo. Ce ne sono altri, che sono elencati nel sed documentazione (puoi visualizzarla con info sed comando).

Il carattere speciale & nella clausola di sostituzione si riferisce al modello abbinato:

$ sed ‘s/is/\U&/’ example.txt
hello
world
ThIS is line three.
Here IS the final line.

Puoi anche passare contrassegni speciali per influenzare il modo in cui s elabora ciò che trova. Il g (per globale , presumibilmente) il flag indica s per applicare la sostituzione a tutte le corrispondenze trovate sulla linea e non solo alla prima corrispondenza:

$ sed ‘s/is/\U&/g’ example.txt
hello
world
ThIS IS line three.
Here IS the final line.

Altri flag importanti includono un numero per indicare quale occorrenza di un pattern abbinato influenzare:

$ sed ‘s/is/\U&/2’ example.txt
hello
world
This IS line three.
Here is the final line.

Il w flag, seguito da un nome file, scrive una riga corrispondente in un file solo se viene apportata una modifica:

$ sed ‘s/is/\U&/w sed.log’ example.txt
hello
world
ThIS is line three.
Here IS the final line.
$ cat sed.log
ThIS is line three.
Here IS the final line.

Le bandiere possono essere combinate:

$ sed ‘s/is/\U&/2w sed.log’ example.txt
hello
world
This IS line three.
Here is the final line.
$ cat sed.log
This IS line three.

Script

Ci sono molti ottimi siti là fuori con sed "una riga". Ti danno sed orientato alle attività comandi per risolvere problemi comuni. Tuttavia, l'apprendimento di sed per te stesso ti consente di scrivere le tue battute personali e quelle possono essere adattate alle tue esigenze specifiche.

Script per sed possono essere scritte come righe in un terminale, oppure possono essere salvate in un file ed eseguite con sed si. Tendo a scrivere piccoli script tutti come un comando perché mi ritrovo raramente a riutilizzare sed comandi nella vita reale. Quando scrivo un sed script, di solito è molto specifico per un file. Ad esempio, dopo aver scritto la bozza iniziale di questo stesso articolo, ho usato sed standardizzare la maiuscola di "sed", e questo è un compito che probabilmente non dovrò mai più fare.

Puoi inviare una serie di comandi distinti a sed separato da un punto e virgola (; ).

$ sed ‘3t ; s/line/\U&/’ example.txt
hello
world
This is LINE three.
This is the final line.

Modifiche all'ambito con parentesi graffe

Puoi anche limitare i risultati interessati dalle parentesi graffe ({} ). Quando alleghi sed comandi tra parentesi graffe, si applicano solo a una selezione specifica. Ad esempio, la parola "riga" appare in due righe del testo di esempio. Puoi forzare sed per influenzare solo la riga finale dichiarando la condizione di corrispondenza richiesta ($ per indicare la riga finale) e inserendo le s comando che desideri venga eseguito tra parentesi graffe subito dopo:

$ sed ‘$ {s/line/\U&/}’ example.txt
hello
world
This is line three.
This is the final LINE.

Impara Sed

Puoi fare molto di più con sed rispetto a quanto spiegato in questo articolo. Non sono nemmeno riuscito a ramificare (b ), test (t ), la attesa spazio (H ), e molte altre funzionalità. Mi piace ed , sed probabilmente non è l'editor di testo che utilizzerai per la creazione di documenti o anche per ogni attività con script che devi eseguire, ma è una potente opzione che hai come utente POSIX. Imparare a sed i comandi sono strutturati e come scrivere brevi script può apportare modifiche rapide a enormi quantità di testo. Leggi le info pagine di GNU sed o le pagine man di BSD sed e scopri cosa sed può fare per te.


Linux
  1. Come inserire del testo prima della prima riga di un file?

  2. Aggiungere il testo abbinato alla riga?

  3. Come utilizzare l'editor di testo in InstantSite.

  4. Come inserire un testo all'inizio di un file?

  5. Come inserisco il testo nella prima riga di un file usando sed?

Come utilizzare la funzione di controllo ortografico in Vim Text Editor

Manipolazione del testo dalla riga di comando con grep

Micro:un editor di testo basato su riga di comando per Linux

COME USARE SED EDITOR

Come installare l'ultima versione di nano text editor

Come eliminare il testo selezionato nell'editor vi