GNU/Linux >> Linux Esercitazione >  >> Linux

Tutorial Unix Sed:trova e sostituisci testo all'interno di un file usando RegEx

Questo articolo fa parte della serie Unix Sed Tutorial in corso. Negli articoli precedenti, abbiamo discusso dell'operazione di stampa sed e dell'operazione di eliminazione sed.

In questo articolo esaminiamo come utilizzare il comando sostitutivo sed "s".

Il comando `s' è probabilmente il più importante in `sed' e ha molte opzioni diverse.

Il comando `s' tenta di confrontare lo spazio del modello con il REGEXP fornito; se la corrispondenza ha esito positivo, la parte dello spazio del modello che è stata abbinata viene sostituita con REPLACEMENT.

Syntax:

#sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename
#sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename
  • s è un comando sostitutivo
  • / è un delimitatore
  • REGEXP è un'espressione regolare da abbinare
  • SOSTITUZIONE è un valore da sostituire

I FLAG possono essere uno qualsiasi dei seguenti

  • g Sostituisci tutte le istanze di REGEXP con REPLACEMENT
  • n Potrebbe essere qualsiasi numero, sostituire l'n-esima istanza di REGEXP con REPLACEMENT.
  • p Se è stata effettuata la sostituzione, stampa il nuovo spazio del modello.
  • Faccio corrispondere REGEXP senza distinzione tra maiuscole e minuscole.
  • w file Se è stata effettuata la sostituzione, scrivi il risultato nel file specificato.
  • Possiamo usare diversi delimitatori ( uno di @ %; :) invece di /

Per prima cosa creiamo il file geekstuff.txt che verrà utilizzato in tutti gli esempi menzionati di seguito.

$ cat thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

Esaminiamo ora alcuni esempi interessanti per la sostituzione.

1. Sostituisci la parola "Linux" con "Linux-Unix" usando sed s//

Nell'esempio seguente, nella riga di output “1. Linux-Unix Sysadmin, Linux Scripting ecc” solo prima Linux viene sostituito da Linux-Unix. Se non vengono specificati flag, viene sostituita la prima corrispondenza della riga.

$ sed 's/Linux/Linux-Unix/' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

2. Sostituisci tutti gli aspetti di una parola usando sed s//g

Il comando sed seguente sostituisce tutte le occorrenze di Linux in Linux-Unix utilizzando il flag di sostituzione globale "g".

$ sed 's/Linux/Linux-Unix/g' thegeekstuff.txt
# Instruction Guides
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux-Unix
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

3. Sostituisci solo la seconda occorrenza di una parola usando sed s//2

Nell'esempio seguente, nella riga di output “1. Linux Sysadmin, Linux-Unix Scripting ecc.” solo la seconda occorrenza di Linux viene sostituita da Linux-Unix.

$ sed 's/Linux/Linux-Unix/2' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux-Unix Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows- Sysadmin, reboot etc.

4. Scrivi le modifiche a un file e stampa le modifiche utilizzando sed s//gpw

L'esempio seguente ha la sostituzione con tre flag. Sostituisce tutte le occorrenze di Linux con Linux-Unix e stampa l'output sostituito e lo stesso scritto nel file specificato.

$ sed -n 's/Linux/Linux-Unix/gpw output' thegeekstuff.txt
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix
$ cat output
1. Linux-Unix Sysadmin, Linux-Unix Scripting etc.
4. Storage in Linux-Unix

5. Sostituisci solo quando la linea corrisponde al motivo usando sed

In questo esempio, se la riga corrisponde al modello “-“, sostituisce tutti i caratteri da “-” con il vuoto.

$ sed '/\-/s/\-.*//g' thegeekstuff.txt
# Instruction Guides
1. Linux Sysadmin, Linux Scripting etc.
2. Databases
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
#  Additional FAQS
6. Windows

6. Elimina l'ultimo numero X di caratteri da ciascuna riga utilizzando sed

Questo esempio elimina gli ultimi 3 caratteri da ogni riga.

$ sed 's/...$//' thegeekstuff.txt
# Instruction Gui
1. Linux Sysadmin, Linux Scripting e
2. Databases - Oracle, mySQL e
3. Security (Firewall, Network, Online Security e
4. Storage in Li
5. Productivity (Too many technologies to explore, not much time availab
#  Additional F
6. Windows- Sysadmin, reboot e

7. Elimina i commenti utilizzando sed

Elimina tutte le righe di commento da un file come mostrato di seguito usando il comando sed.

$  sed -e 's/#.*//' thegeekstuff.txt

1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)

6. Windows- Sysadmin, reboot etc.

8. Elimina commenti e righe vuote usando sed

In questo esempio, ci sono due comandi separati da ';'

  • Il primo comando sostituisce le righe che iniziano con # alle righe vuote
  • Il secondo comando cancella le righe vuote.
$ sed -e 's/#.*//;/^$/d'  thegeekstuff.txt
1. Linux Sysadmin, Linux Scripting etc.
2. Databases - Oracle, mySQL etc.
3. Security (Firewall, Network, Online Security etc)
4. Storage in Linux
5. Productivity (Too many technologies to explore, not much time available)
6. Windows- Sysadmin, reboot etc.

9. Converti le nuove righe DOS (CR/LF) in formato Unix usando sed

Copia il file DOS su Unix, potresti trovare \r\n alla fine di ogni riga.

Questo esempio converte il formato file DOS nel formato file Unix usando il comando sed.

$sed 's/.$//' filename

10. Elimina i tag HTML dal file usando sed

In questo esempio, l'espressione regolare fornita nel comando sed corrisponde ai tag html e la sostituisce con il vuoto.

$ sed -e 's/<[^>]*>//g'
This <b> is </b> an <i>example</i>.
This  is  an example.

Linux
  1. Utilizzo di sed per trovare e sostituire file di testo in Linux

  2. Utilizzo dei comandi Sed,ex e perl per trovare e sostituire un testo in Linux

  3. Sostituire una riga con un altro contenuto utilizzando Sed e Parallel per un file di grandi dimensioni?

  4. Utilizzo di grep e sed per trovare e sostituire una stringa

  5. Utilizzo di sed per sostituire uno schema specifico

Come trovare e sostituire il testo in Vim

Esercitazione Unix Sed:stampa di righe di file utilizzando l'indirizzo e i modelli

Esercitazione Unix Sed:Elimina le righe di file utilizzando l'indirizzo e i modelli

Tutorial Unix Sed:come scrivere su un file usando Sed

Tutorial Unix Sed:aggiungi, inserisci, sostituisci e conta righe di file

Come utilizzare Sed per trovare e sostituire una stringa in un file