Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

gawk : remplacer une chaîne par une autre

2 réponses
Avatar
SDC
Bonjour,

Soit les trois cha=EEnes 'x', 'c' et 'r' constitut=E9es de n'importe
quels caract=E8res (y compris '$', '+', '*', ...). Dans un script
'gawk', je veux remplacer chaque occurence de 'c' dans 'x' par 'r', en
consid=E9rant des cha=EEnes et non des expressions r=E9guli=E8res. Il
s'agit donc de faire quelque chose comme 'gsub(c, r, x)', o=F9 'c' n'est
pas trait=E9 comme une expression r=E9guli=E8re et o=F9 le caract=E8re '&'
n'a pas de signification particuli=E8re dans 'r'. 'x', 'c' et 'r' sont
des variables et non des constantes. Quelqu'un a-t-il une id=E9e ?

2 réponses

Avatar
Thomas Baruchel
Soit les trois chaînes 'x', 'c' et 'r' constitutées de n'importe
quels caractères (y compris '$', '+', '*', ...). Dans un script
'gawk', je veux remplacer chaque occurence de 'c' dans 'x' par 'r', en
considérant des chaînes et non des expressions régulières. Il
s'agit donc de faire quelque chose comme 'gsub(c, r, x)', où 'c' n'est
pas traité comme une expression régulière et où le caractère '&'
n'a pas de signification particulière dans 'r'. 'x', 'c' et 'r' sont
des variables et non des constantes. Quelqu'un a-t-il une idée ?


Comme il n'y a qu'un nombre fini de caractères problématiques,
inspire-toi de ceci :

BEGIN {
x = "he$$o world";
c = "he$$o";
r = "hello";

gsub("$","$",c);
gsub(c,r,x);
print x;
}

script qui marche chez moi :
awk -f test.awk
mais avec une autre version de awk que la tienne.

--
Thomas Baruchel
write to baruchel at the host called bluebottle dot com
écrire à baruchel chez l'hôte nommé bluebottle point com
http://baruchel.thomas.free.fr/

Avatar
SDC
Merci beaucoup !
Je m'en veux même de ne pas y avoir penser !
Pour traiter plusieurs caractères spéciaux en une seule fois, on peut
même faire :
gsub(/($|*|+)/, "\&", c)