Re: [ssfr] sed : remplacer guillemets anglais par guillements français |
[ Thread Index |
Date Index
| More debianworld.org/shellscript-fr Archives
]
Bonjour,
Le 02-11-2008, à 10:19:39 +0100, Jacques L'helgoualc'h (jacques.lhh+SSFR@xxxxxxxxx) a écrit :
> dlist@xxxxxxxxxx a écrit, samedi 1 novembre 2008, à 14:36 :
> bonjour.
>
> > J'ai plusieurs fichiers tex où il faudrait remplacer les " par des «»,
> > je me dis que c'est pour sed ça.
>
> Oui et non,
>
> - une paire de guillemets peut s'étaler sur plusieurs lignes ;
C'est le cas,
> - elles peuvent être éventuellement emboîtées ;
également ..
> - en (La)TeX, il vaut mieux utiliser les commandes \og et \fg (quitte à
> les redéfinir) ;
Merci je les avais complètement oublié.
> - suivant la nature du texte, certains « " » peuvent ne pas être des
> guillemets --- même la parité ne permet pas de déterminer si ça ouvre
> ou ça ferme : dans un polycopié sur le « shell », tu peux donner un
> exemple de chaîne contenant une « double-quote », comme "\""...
Effectivement, cette histoire de parité est très embêtante. En faisant
un
grep \" fichier.tex | wc -l
je m'aperçois que le résultat n'est pas un nombre pair.
> Tu peux aussi vouloir essayer sur ce texte-ci :)
J'ai déjà assez à faire avec mon document tex :-), enfin ce n'est pas le
mien mais celui de ma femme, son travail de master. Je lui avais dit au
début d'écrire correctement le texte mais mon conseil a dû se perdre je
ne sais où ..
> > le motif est
> > "puis 0,1 ou plus espaces puis un mot puis 0,1 ou plus espaces et enfin"
>
> Ben non, tu peux avoir plusieurs mots, éventuellement composés, et des
> \commandes comme "\TeX".
Oui en fait j'avais noté ce motif tout au début de ma réflexion (pardon
Edi).
> > Ce motif doit être remplacé par
> >
> > «un_espace_insécable puis le mot puis un_espace_insécable puis »
> >
> > Faut traduire ça en sed maintenant, et c'est là que ça se complique
> > (pour moi).
>
> 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
Alors ça semble marcher sur les occurences d'une même ligne mais pas sur
plusieurs (ce qui était attendu mesemble-t-il).
> (les commandes \og et \fg pourront gérer l'insécabilité des espaces).
Nikel ! Merci
> 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
Faut que je m'y penche dessus.
> > Merci pour vos suggestions.
>
> 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.
> Cherche aussi dans les archives de fctt (news:fr.comp.text.tex)...
Merci pour toutes ces suggestions et conseils, ils m'ont vraiment bien
aidé et fait gagné du temps.
Steve
---