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

Re : Re: sed ignorer une occurence



Le vendredi 2 juin 2023 à 18:05, Marc Chantreux <mc@unistra.fr> a écrit :


> salut,
> 
> > % 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.
> 

J'utilise plutôt emacs et ne connais pas bien vi autrement que pour éditer des fichiers de config.


> 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

d'autre chose qu'un point "." tu veux dire ?
Oui c'est bien ma demande virer tous les retour à la ligne et ignorer([^.\n]) ceux qui sont précédés d'un point.

Il me manquais deux notions :
[^.\n] non match (la négation de la correspondance) 
\1 backreference dans l'expression régulière, là par contre il va falloir que je lise une bonne doc sur le sujet, G pas tout compris ! :-)

> 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.
> 

Un tout grand merci, je vais d’abord me documenter sur les backreferences  !

Avec gratitude,
Benoît


Reply to: