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

---


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/