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.