Re: [ssfr] sed : remplacer guillemets anglais par guillements français |
[ Thread Index |
Date Index
| More debianworld.org/shellscript-fr Archives
]
Le 03-11-2008, à 10:02:48 +0100, Jacques L'helgoualc'h (jacques.lhh+SSFR@xxxxxxxxx) a écrit :
> steve a écrit, lundi 3 novembre 2008, à 09:07 :
> > Le 02-11-2008, à 10:19:39 +0100, Jacques L'helgoualc'h a écrit :
> [...]
> > > - une paire de guillemets peut s'étaler sur plusieurs lignes ;
> >
> > C'est le cas,
>
> C'est traité assez facilement.
>
> > > - elles peuvent être éventuellement emboîtées ;
> >
> > également ..
>
> Là, c'est plus embêtant... Sed n'est pas doué pour l'arithmétique.
> En cas de "debut "niveau 2" fin", tu vas récupérer un
>
> « debut » niveau 2 « fin »
Bon après une matinée de sed dans tous les sens et de retouche à la
main, c'est enfin bon, merci pour l'aide.
> (ce qui n'est pas totalement erroné typographiquement, il me semble) mais il
> faudrait
>
> \og debut\og niveau 2\fg fin\fg
>
>
> [...]
> > grep \" fichier.tex | wc -l
>
> remarque pédante, mais on est sur shellscript-fr :)
>
> grep -cF \" fichier.tex
Grand dieu, ça fait des années que j'utilise le | wc -l alors que
l'option -c existe ...
>
> [...]
> > > Tu peux essayer (GNU Sed --- sans garantie)
> > >
> > > sed -i.old -re 's/"[[:space:]]*([^"]*)[[:space:]]*"/\\og \1 \\fg /g
> >
> > Pour les archives, la commande complète est :
> >
> > sed -i.old -re 's/"[[:space:]]*([^"]*)[[:space:]]*"/\\og \1 \\fg /g'
> > fichier_in.tex
>
> Mea culpa --- l'espace entre \1 et \\fg est superflu, pas les deux autres.
C'était surtout pour le ' manquant que j'ai réécrit la ligne.
> [...]
> > > Pour les multilignes, quelque chose comme
> > >
> > > sed -i.old -nre '
> > > H
> > > ${
> > > g
> > > s/"[[:space:]]*([^"]*)[[:space:]]*"/\\og \1 \\fg /g
> > > p
> > > }'
> >
> >
> > J'ai essayé cette expression en la mettant sur une ligne, mais il y a
> > une erreur :
> >
> > sed -i.old -nre 'H ${g s/"[[:space:]]*([^"]*)[[:space:]]*"/\\og \1 \\fg
> > /g p}' partie3b.tex
> >
> > sed: -e expression n°1, caractère 3: caractères inutiles après la
> > commande
>
> Quand tu regroupes sur une ligne, tu dois séparer les commandes par des
> points-virgules :
>
> sed -i.old -nre \
> 'H;${g;s/"[[:space:]]*([^"]*)[[:space:]]*"/\\og \1\\fg /g;p}' \
> partie3b.tex
Ok merci, je ne savais pas (j'ai appris plein de trucs grâce à vous,
j'en profite pour en remercier une fois de plus).
> Tu pourrais même faire
>
> sed -i.old -nre 'commande1 ; commande2 ; ... ' *.tex
ok.
> mais ...
> [...]
> > > Sur un texte purement littéraire, ça pourrait passer, mais en cas de
> > > doute j'essaierai plutôt avec le C-M-% interactif d'Emacs.
> >
> > Connais pas.
>
> Vi aussi doit savoir faire du remplace-regexp interactif ?
J'imagine, pour ma part j'ai fait une recherche avec /" puis n pour la
prochaine occurence, ça me convient très bien.
Steve
---