Re: script pour compter 840 caractères et insérer un caractère de continuation de ligne
Fanfan a écrit, mardi 19 mai 2009, à 13:25 :
> Le Tuesday 19 May 2009 à 11:51:52 (+0200), Jacques L'helgoualc'h a écrit :
> > > comment insérer un caractère "retour à la ligne" quand on a les 2
> > > conditions :
> > > 1- on a dépassé 70 caractères d'affilé ("blanc ou pas")
> > > 2- on continue jusqu'à ce que l'on recontre un "blanc"
> >
> > sed -re 's/.{42,70}[[:blank:]]/&\\\n/g'
>
> Tu fais ta césure avant le 70 eme caractère, ce qui ne correspond pas à
> la condition 1.
Oui, je réponds un peu à côté : je suppose qu'on veut
- limiter à 70 caractères (ou 71, blanc compris (les cartes perforées, c'était 72
+ 8 colonnes de numérotage :)) ;
- en coupant de préférence sur les blancs...
> Il me semblait que le quantificateur {} était avide et allait avaler
> tous les caractères jusqu'à 70, même si on trouve un blanc entre 42 et
> 70. Me gourre-je ?
Un peu, il reculera au dernier blanc dans la fourchette :
~ $ echo 012345678901234567890123456789012345678942 \
0123456789012345678901234567890123456789 | \
sed -re 's/.{42,70}[[:blank:]]/&\\\n/g'
012345678901234567890123456789012345678942 \
0123456789012345678901234567890123456789
> > va avoir une certaine élasticité ; pour ne pas te casser la tête avec un
> > unique script sed compliqué, tu peux piper dans un second rigide pour
> > casser les lignes trop longues que laisse passer le premier :
> > sed -re 's/.{42,70}[[:blank:]]/&\\\n/g' | \
> > sed -re 's/.{70}/&\\\n/g'
>
> En fait, la, tu vas couper à 70, même au milieu d'un mot.
Comme dans la demande initiale.
> Au final, toutes tes lignes feront moins de 71 caractères, avec une césure en
> plein mot. Non ?
Oui, si besoin.
--
Jacques L'helgoualc'h
Reply to: