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