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

[HS] Re: script pour compter 840 caractères et insérer un caractère de continuation de ligne



Le Tuesday 19 May 2009 à 10:54:18 (+0200), Gilles MISSONNIER a écrit :
> raffinons ! raffinons ! :
> aux experts de sed | awk | perl | sh : (Jacques ?)
> 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" 
> je suis sûr qu'il y aura des preneurs ...

On est en plein dans le HS.

Il y a certainement mieux, mais cette ligne SED fonctionne. Je suis
parti du principe que tu voulais remplacer (cad supprimer) le caractère
blanc par un retour à la ligne.

sed 's/\(.\{70,70\}[^ ]*\) \(.\+\)$/\1\n\2/'


Explication :

\(.\{70,70\}[^ ]*\)

Je grignotte 70 caractères (quelque soient les caractères) suivis d'un
ou plusieurs caractères différents d'espace et je mémorise dans \1
Ainsi, si ca existe dans la ligne, j'ai consommé les 70 premiers
caractères suivi des caractères différents de espace. J'ai donc en
mémoire la sous chaine qui précédera eventuellement le retour à la
ligne.

L'espace à l'extérieur des parenthèses est là pour être consommé par la
regex sans être mémorisé, de façon à être remplacé par le retour à la
ligne si la regex peut s'appliquer. Ce n'était pas spécifié, mais ça m'a
semblé logique. Si l'espace doit être conservé avant le retour à la
ligne, il suffit de le déplacer avant la fermeture des parenthèses,
sinon, s'il doit se retrouver en début de ligne, il suffit de le
supprimer de la regex.

\(.\+\)$
Je grignotte au moins un caractère (quel qu'il soit) jusqu'à la fin de
la ligne et je mémorise dans \2
Je m'assure qu'il y a bien des caractères après mon point d'insertion. 
Sinon, je risque d'insérer un retour à la ligne alors que je suis déjà
en fin de ligne. Ce n'était pas spécifié, mais ça m'a semblé logique. Si
ce n'est pas nécessaire, il suffit de supprimer cette partie de la
regex.

\1\n\2
J'écris la première chaîne mémorisée (au moins 70 caractères suivis d'un
nombre quelconque de caractères différents d'espace), un retour à la
ligne et la seconde chaine mémorisée (caractères restants sur la lignes
après l'espace de césure).

Voila, avec une explication. Mais d'autres feront certainement bien
mieux que moi avec des regex. 


-- 
Le mystère de l'incarnation se répète en chaque femme ; tout enfant
qui naît est un Dieu qui se fait homme.  
                           [ Simone de Beauvoir ]

Attachment: signature.asc
Description: Digital signature


Reply to: