AWK-SUB Pb de

Résolu/Fermé
Jacouille - 3 avril 2008 à 17:30
 Jacouille - 3 avril 2008 à 17:39
Bonjour,

J'ai un problème ressemblant à celui abordé ici : http://www.commentcamarche.net/forum/affich 2846642 shell remplacer un ligne dans un fichier awk
Je suis arrivé à utiliser la méthode fournie gentiment par jipicy pour faire la même chose avec une chaîne de caractères "normale".
Mais, si je veux utiliser une chaîne de caractère contenant un backslash, je n'arrive plus à rien.

Exemple :
var="machin"
cat plop | awk '{sub(/'$var'/,"Tata");print}'

Il modifie efefctivement le premier "machin" de chaque ligne de plop par "Tata"

Mais, si je passe avec
var="machin\bidule"

Les machin\bidule ne sont pas modifiés en "Tata".

Pourtant, si je fais un echo, j'ai bien la bonne chaîne de caractères.
J'ai aussi essayé de mettre des "\\" à la place des "\", mais rien n'y fait...

Par contre, ce que je ne comprend pas, c'est que si je modifie Tata par Tat\\Youpla, cela fonctionne très bien.

Merci de votre aide précieuse

1 réponse

J'avais posé ma question ici en désespoir de cause, malgré de nombreuses recherches sur Internet...
Et voici LA réponse (après avoir fait un petit passage sur http://snap.nlc.dcccd.edu/reference/awkref/gawk_5.html#SEC27 ), et un grand coup de génie :=)

Il ne faut pas écrire :
var="Machin\\Truc"
mais
var="Machin\\\\Truc"

En effet, un echo de $var donne bien Machin\Truc sur la première solution, et alors awk cherche un "\T", au lieu de chercher un "\\", qui est donné par un echo de $var dans la deuxième solution...

Évident, en fait, mais j'y avais pas pensé.

À plus tard
0