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'