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'