salut,

Le Thu, Jun 01, 2023 at 10:46:00AM +0000, benoit a écrit :
> Je voudrais reformater du texte en colonne, qui a été justifié avec des 
> retours
> à la  ligne (\n) et des "-" de coupure de mot
> ex:
> Je voudrais reformater du texte en colonne, qui a été just- «---
> ifié avec des retours à la  ligne (\n) et est - de coupure de
>  mot.
> 
> % sed -rz '{s/-\n//g;s/\n//g}' format.txt

<<\% sed -rz 's/-\n//g; s/([^.\n])\n/\1/g' | tr -s ' ' | fmt -w72

Je suis pas sur d'avoir compris le pb.

Je voudrais reformater du texte en colonne,
qui a été                            just-
ifié avec des retours à la ligne (\n)    et
est - de coupure de mot.

%

Si la commande correspond bien à ton besoin, tu peux directement
l'utiliser dans vi grace à un range.

si tu as fais une selection visuelle, tappes

        !sed -rz 's/-\n//g; s/([^.\n])\n/\1/g' | tr -s ' ' | fmt -w72

les prochains usages de ! rappellent le dernier filtre, tu n'auras
plus qu'a taper !! au lieu de ! et rappeler la commande.

Évidement ça marche avec tous les ranges :)

astuce: mettre le filtre dans un fichier à part pour en faciliter la
maintenance:

:sp monfiltre
:!chmod a+x %

et ensuite tu peux écrire ton filtre en espaçant un peu et en commentant

#!/bin/sh
# note1: je ne vire le retour à la ligne que si il est précédé
#        d'autre chose qu'un espace
sed -rz '
                s/-\n//g
                s/([^.\n])\n/\1/g # cf. note1
        ' |
        tr -s ' ' |
        fmt -w72

et finalement

filtrer avec <monrange>!./monfiltre

je fais concis pour aller vite. n'hésite pas à me demander de plus
amples explications si cette piste de plait.

cordialement,
marc

Répondre à