GNU/Linux >> Linux Esercitazione >  >> Linux

Schema di sostituzione dopo l'ennesima corrispondenza trovata su ogni riga??

Questa domanda ha già risposte qui :sed:cancella tutte le occorrenze di una stringa tranne la prima

(4 risposte)
Chiuso 2 anni fa.

Ho un file contenente delle righe:

india;austria;japan;chile
china;US;nigeria;mexico;russia

Voglio sostituire tutte le occorrenze del punto e virgola su ogni riga con ad es. ;NEW; , ma solo a partire dalla 2a occorrenza. Il risultato dovrebbe assomigliare a questo:

india;austria;NEW;japan;NEW;chile
china;US;NEW;nigeria;NEW;mexico;NEW;russia

L'ho provato con gsub, ma sostituisce tutte le occorrenze:
awk '/;/{gsub(/;/,";NEW;") }{print}'

Risposta accettata:

Il awk soluzione è molto più lunga, ma è più facile renderla generica:

awk -F; '{for(i=1;i<NF;i++)printf"%s;%s",$i,(i>=2)?"NEW;":"";print$NF}' replacefile

È possibile farlo con sed anche, facendo un ciclo con il t comando e sostituendo sempre il 2° (o quello che vuoi) separatore in un segno temporaneo (di solito n ):

sed ':b;s/;/n/2;tb;s/n/;NEW;/g' replacefile

Linux
  1. Utilizzo di Sed per cercare e sostituire una linea tra intervalli di pattern

  2. Trova il numero di riga che contiene il modello utilizzando il delimitatore Regex personalizzato?

  3. Restituire solo la parte di una linea dopo uno schema corrispondente?

  4. Sed On Osx inserisce a una certa linea?

  5. sed da inserire solo alla prima corrispondenza

Sostituzione di String in Bash

In Bash, come aggiungo una stringa dopo ogni riga in un file?

Elimina gli spazi bianchi all'inizio di ogni riga del file, usando bash

sostituire l'ennesima occorrenza di stringa in ogni riga di un file di testo

sed:come sostituire la riga se trovata o aggiungere alla fine del file se non trovata?

Come ottenere l'ennesima riga dopo una presa?