GNU/Linux >> Linux Esercitazione >  >> Linux

Usa Sed per aggiungere il carattere nell'ennesima posizione della stringa corrispondente?

Devo aggiungere un carattere all'ennesima posizione (in questo caso 2a) di una stringa corrispondente.
Ad esempio, in un file text.txt Vorrei aggiungere una N prima della stringa e dopo il " solo nelle stringhe che contengono blah

testo.txt:

"1blah8","na","8blah4"  
"2blah5","na","10blah4"  
"5blah5","na","1blah234"  

Voglio ottenere un text2.txt:

"Ν1blah8","na","Ν8blah4"  
"Ν2blah5","na","Ν10blah4"  
"Ν5blah5","na","Ν1blah234"  

Ho provato sed 's/.*blah.*/N&/' text.txt > text2.txt
ma ottengo il N prima del " e solo nella prima stringa trovata di ogni riga.

Risposta accettata:

Un altro approccio:

$ sed 's/"([^"]*blah[^"]*")/"N1/g' test.txt 
"N1blah8","na","N8blah4"  
"N2blah5","na","N10blah4"  
"N5blah5","na","1blah234

La regex sta cercando un " , quindi 0 o più non " caratteri seguiti da un blah , quindi 0 o più non " ancora. A causa delle parentesi, questo viene catturato e in seguito può essere indicato come 1 . Pertanto, il comando sostituirà il modello abbinato con se stesso (1 ) ma con un "N allegato. Ecco perché il primo " è fuori dalle parentesi. Il /g modificatore alla fine fa sostituire tutte le stringhe corrispondenti in ogni riga.

Se il tuo sed versione lo supporta, puoi semplificarlo in:

sed -E 's/"([^"]*blah[^"]*")/"N1/g'

Linux
  1. Come utilizzare il comando WC per stampare il conteggio di caratteri, byte, newline e parole in Linux

  2. Avvolgi il primo carattere di una stringa usando Sed?

  3. Sostituzione di stringhe usando un dizionario?

  4. Come posso aggiungere una stringa all'inizio di ogni file in una cartella in bash?

  5. trova il testo corrispondente e sostituisci la riga successiva

Sostituzione di String in Bash

COME USARE IL COMANDO TAIL

Come usare il comando head

COME USARE SED EDITOR

I 20 migliori comandi sed da usare

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