La même chose mais avec l'outil sed cette fois.
Je veux donc afficher ce qui se trouve entre deux motifs, mais en utilisant des variables à la place des motifs. J'utilise le fichier suivant :
Ce fichier est un fichier particulier
car il contient un passage sensible situé
entre MOTIF_01 et
une balise
de fin
appelée MOTIF_02. Il s'agit d'extraire
ce qui se situe entre les deux.
Pour cela j'utilise sed de la façon suivante :
# Le cas classique avec MOTIF_01 et MOTIF_02
cat mon_fichier | sed -n "/MOTIF_01/,/MOTIF_02/p"
# Ce qui me donne
entre MOTIF_01 et
une balise
de fin
appelée MOTIF_02. Il s'agit d'extraire
En fait, cela me donne ce qui se trouve entre les lignes comprenant les motifs, en plus des lignes comprenant les motifs. Après ça, un substitution avec sed "s///" finit le travail.
# En utilisant des variables (il suffit de les ajouter aux motifs)
cat mon_fichier | sed -n "/MOTIF_01$VAR_01/,/$VAR_02/p"
Cette fois c'est une capacité de l'outil awk qui m'intéresse.
Comment afficher ce qui se trouve entre deux motifs ? Le point fort est que cette méthode fonctionne même si les motifs ne sont pas sur la même ligne :
# J'affiche ce qui se trouve entre le motifs MOTIF_01 et MOTIF_02
cat mon_fichier | awk "/MOTIF_01/,/MOTIF_02/"
Dans ce cas, les motifs sont affichés avec ce qui les sépare. Le résultat peut ressembler à quelque chose comme ça :
bla bla bla MOTIF_01 toc
//Plein de trucs se trouvant entre les motifs
paf pouf MOTIF_02 plouf plouf
Mais quelle surprise!
Et toujours aucune mention des traités européens (on préfère taper sur les conseils régionaux à la place).