Bonjour.
Une fois n’est pas coutume, un peu d’informatique sur ce blog (ne vous inquiétez pas, ça ne durera pas longtemps, le prochain INT10 est prévu pour mercredi soir :D).
J’ai été confronté au besoin de remplacer une chaine de caractères par le contenu d’un fichier dans un fichier texte.
Exemple : je désire remplacer “##__youpi_tralala__##” par le contenu du fichier nommé “youpi_tralala”.
J’ai essayé en sed, mais ça ne fonctionnait pas à tout les coups, avec sed qui voulait interpréter le contenu du fichier “youpi_tralala”.
Donc j’ai sorti mes moufles et mon outil préféré (AWK).
Voici le résultat, le script include_file.awk :
{ str=$0 where=match(str,regexp) if (where) { while ((“cat “file) | getline tstr > 0) { if (newstr == “”) { newstr=tstr } else { newstr=newstr”\n"tstr } } close (tstr) sub(regexp,newstr,str) } print str }
C’est un beau script AWK, qui s’appelle de la façon suivante : awk -v regexp=“belle regexp” -v file=/chemin/vers/le/fichier/a/inclure -f include_file.awk fichier_contenant_la_regex
Je m’en sers souvent en LaTeX pour débugguer certains include un peu farfelus que je veux faire, pour savoir si c’est le contenu du fichier à inclure ou mon include qui cause le problème.
Pour l’utiliser avec LaTeX, voici un exemple :
awk -v regexp="^%%__paragraphe1__%%$” -v file=includes/paragraphe1.tex -f include_file.awk document.tex | pdflatex -jobname=document
Ici, la chaîne présente dans mon fichier document.tex est “%%__paragraphe1__%%”.
Et comme on dit : “Ça marche mais c’est crado… C’est made in davro !!”
Merci.