Je dois ajouter un caractère à la nième position (dans ce cas la 2e) d'une chaîne correspondante.
Par exemple, dans un fichier text.txt Je voudrais ajouter un N avant la chaîne et après le " uniquement dans les chaînes contenant blah
text.txt :
"1blah8","na","8blah4"
"2blah5","na","10blah4"
"5blah5","na","1blah234"
Je veux obtenir un text2.txt :
"Ν1blah8","na","Ν8blah4"
"Ν2blah5","na","Ν10blah4"
"Ν5blah5","na","Ν1blah234"
J'ai essayé sed 's/.*blah.*/N&/' text.txt > text2.txt
mais j'obtiens le N avant le " et uniquement dans la première chaîne trouvée de chaque ligne.
Réponse acceptée :
Une autre approche :
$ sed 's/"([^"]*blah[^"]*")/"N1/g' test.txt
"N1blah8","na","N8blah4"
"N2blah5","na","N10blah4"
"N5blah5","na","1blah234
La regex recherche un " , puis 0 ou plus non-" caractères suivis d'un blah , puis 0 ou plus non-" de nouveau. À cause des parenthèses, ceci est capturé et peut ensuite être référencé comme 1 . Par conséquent, la commande remplacera le modèle correspondant par lui-même (1 ) mais avec un "N annexé. C'est pourquoi le premier " est en dehors des parenthèses. Le /g le modificateur à la fin lui permet de remplacer toutes les chaînes correspondantes dans chaque ligne.
Si votre sed version le prend en charge, vous pouvez le simplifier en :
sed -E 's/"([^"]*blah[^"]*")/"N1/g'