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
I 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.