[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: