English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Il comando sed di Linux utilizza script per elaborare file di testo.
Sed può elaborare e editare file di testo in base alle istruzioni del script.
Sed viene principalmente utilizzato per editare automaticamente uno o più file, semplificare le operazioni ripetute sui file e scrivere programmi di trasformazione.
sed [-hnV][-e<script>][-f<script file>][file di testo]
Spiegazione dei parametri:
-e<script> o --expression=<script> Elabora il file di testo di input con lo script specificato.
-f<script file> o --file=<script file> Elabora il file di testo di input con lo script specificato nell'opzione.
-h o --help Visualizza l'aiuto.
-n o --quiet o --silent Visualizza solo i risultati elaborati dallo script.
-V o --version Visualizza informazioni sulla versione.
Spiegazione delle azioni:
a : aggiungi, la stringa dopo a può essere utilizzata, e queste stringhe appariranno in una nuova riga (la riga successiva) ~
c : sostituisci, la stringa dopo c può essere utilizzata, e queste stringhe possono sostituire le righe tra n1 e n2!
d : elimina, poiché è eliminare, di solito non c'è nulla dopo d;
i : inserisci, la stringa dopo i può essere utilizzata, e queste stringhe appariranno in una nuova riga (la riga precedente);
p : stampa, ovvero stampare i dati selezionati. Di solito p viene eseguito insieme al parametro sed -n ~
s : sostituisci, può essere utilizzato per sostituire direttamente! Di solito l'azione s può essere combinata con espressioni regolari! Ad esempio, 1,20s/old/new/g è un esempio!
Aggiungi una riga dopo la quarta riga del file testfile, e visualizza il risultato come output standard, digitando il comando seguente nella riga di comando:
sed -e 4a\newLine testfile
Prima di tutto, visualizza il contenuto di testfile come segue:
$ cat testfile #Visualizza il contenuto di testfile HELLO LINUX! Linux è un sistema operativo libero di tipo unix. Questo è un file di test di linux! Linux test
Il risultato dell'output dopo l'uso del comando sed è il seguente:
$ sed -e 4a\newline testfile #Aggiungi una nuova stringa dopo la quarta riga utilizzando sed HELLO LINUX! #Contenuto originale del file testfile Linux è un sistema operativo libero di tipo unix. Questo è un file di test di linux! Linux test newline
Elenca e stampa il contenuto di /etc/passwd, eliminando contemporaneamente le righe 2-5!
[root@www ~]# nl /etc/passwd | sed '2,5d' 1 root:x:0:0:root:/root:/bin/bash 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown .....(successivo abbreviato).....
L'azione di sed è '2,5d', dove 'd' significa eliminare! Poiché le righe 2-5 sono state eliminate, i dati visualizzati non contengono le righe 2-5. Inoltre, notare che il comando originale dovrebbe essere sed -e, ma senza -e va bene anche! Dovrebbe anche essere notato che l'azione dopo sed deve essere racchiusa tra doppi apici ''!
Eliminare solo la riga 2
nl /etc/passwd | sed '2d'
Per eliminare la riga 3 fino alla fine
nl /etc/passwd | sed '3,$d'
Aggiungere 'bere tè?' dopo la seconda riga (cioè aggiungere alla terza riga)!
[root@www ~]# nl /etc/passwd | sed '2a bere tè' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin bere tè 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(successivo abbreviato).....
E se si desidera aggiungere prima della seconda riga
nl /etc/passwd | sed '2i bere tè'
Se si desidera aggiungere più di due righe, aggiungere due righe di testo dopo la seconda riga, ad esempio Bere tè o ...... e bere birra?
[root@www ~]# nl /etc/passwd | sed '2a Bere tè o ......\' > bere birra? ? 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin Bere tè o ...... bere birra? 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(successivo abbreviato).....
Ogni riga deve essere aggiunta con la barra inversa '\'. Quindi, possiamo notare che alla fine della prima riga c'è una '\'.
Sostituire il contenuto delle righe 2-5 con 'No 2-5 numero'?
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 numero' 1 root:x:0:0:root:/root:/bin/bash No 2-5 numero 6 sync:x:5:0:sync:/sbin:/bin/sync .....(successivo abbreviato).....
Con questo metodo possiamo sostituire intere righe di dati!
Elenco solo delle righe 5-7 del file /etc/passwd
[root@www ~]# nl /etc/passwd | sed -n '5,7p' 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
Puoi utilizzare la funzione di visualizzazione a livello di riga di sed per selezionare e visualizzare alcune righe di un file.
Cerca le righe con la parola chiave root in /etc/passwd
nl /etc/passwd | sed '/root/p' 1 root:x:0:0:root:/root:/bin/bash 1 root:x:0:0:root:/root:/bin/bash 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh 3 bin:x:2:2:bin:/bin:/bin/sh 4 sys:x:3:3:sys:/dev:/bin/sh 5 sync:x:4:65534:sync:/bin:/bin/sync ....ignora
Se viene trovato root, oltre a stampare tutte le righe, verranno anche stampate le righe corrispondenti.
Quando si utilizza -n, verranno stampate solo le righe che contengono il modello.
nl /etc/passwd | sed -n '/root/p' 1 root:x:0:0:root:/root:/bin/bash
Elimina tutte le righe che contengono root in /etc/passwd, altre righe vengono visualizzate
nl /etc/passwd | sed '/root/d' 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh 3 bin:x:2:2:bin:/bin:/bin/sh ....ignora #La corrispondenza della riga 1 root è stata eliminata
Cerca /etc/passwd, trova la riga corrispondente a root, esegui il gruppo di comandi dopo il segno di apertura parentesi, separati da punto e virgola, qui sostituisci bash con blueshell e stampa questa riga:
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}' 1 root:x:0:0:root:/root:/bin/blueshell
L'ultima q è uscire.
Oltre al trattamento delle righe intere, sed può anche utilizzare l'unità di riga per cercare e sostituire dati parziali. Fondamentalmente, la ricerca e la sostituzione di sed sono simili a quelle di vi! Sembra un po' così:
sed 's/要被取代的字串/新的字串/g'
Prima di tutto, osserviamo le informazioni originali, utilizzando /sbin/ifconfig per consultare l'IP
[root@www ~]# /sbin/ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 .....(il testo successivo è omesso).....
L'indirizzo IP di questa macchina è 192.168.1.100.
Eliminare la parte precedente dell'indirizzo IP
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
Quindi eliminare la parte successiva, ossia: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
Eliminare la parte successiva dell'indirizzo IP
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' 192.168.1.100
Un comando sed che elimina i dati da terza riga a fine file di /etc/passwd e sostituisce bash con blueshell
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' 1 root:x:0:0:root:/root:/bin/blueshell 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
-e indica l'edizione multipla, il primo comando di edizione elimina i dati da terza riga a fine file di /etc/passwd, il secondo comando sostituisce bash con blueshell.
sed può modificare direttamente il contenuto del file, senza dover utilizzare comandi di pipeline o reindirizzamento dei dati! Tuttavia, poiché questa azione modifica direttamente il file originale, per favore non testare mai con la configurazione del sistema! Utilizziamo ancora il file regular_express.txt per fare un test!
Il file regular_express.txt contiene il seguente contenuto:
[root@www ~]# cat regular_express.txt w3codebox. google. taobao. facebook. zhihu- weibo-
Utilizzare sed per sostituire ogni riga finale di regular_express.txt che finisce con . con !
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt [root@www ~]# cat regular_express.txt w3codebox! google! taobao! facebook! zhihu- weibo-
:q:q
Aggiungere direttamente all'ultima riga di regular_express.txt # Questo è un test:
[root@www ~]# sed -i '$a # This is a test' regular_express.txt [root@www ~]# cat regular_express.txt w3codebox! google! taobao! facebook! zhihu- weibo- # This is a test
Poiché $ rappresenta l'ultima riga e l'azione di a è aggiungere, quindi viene aggiunto alla fine del file # Questo è un test!
opzione -i di sed può modificare direttamente il contenuto del file, questa funzione è molto utile! Ad esempio, se hai un file di 1 milione di righe e devi aggiungere del testo alla riga 100, utilizzare vim potrebbe essere una follia! Poiché il file è troppo grande! Cos'altro posso fare? Utilizza sed! Attraverso la funzione di modifica/ricambio diretta di sed, non hai nemmeno bisogno di usare vim per revisionare!