[sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe (résolu)

Ce qui ne concerne ni le forum ni des problèmes
Répondre
bobo
Elfe
Messages : 593
Inscription : mar. 08 avr. 2014, 22:47

[sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe (résolu)

Message par bobo »

Je cherche une commande shell pour afficher le texte contenu dans un fichier avec un nombre de caractères maximum par ligne, sans couper les mots.

C'est pour ne plus me prendre la tête avec le formatage de certains fichiers texte pour afficher de l'aide dans un terminal. Du coup je pourrais écrire des paragraphes plutôt que de gérer le formatage à la main.

Si vous avez une piste/solution je suis preneur.
Dernière modification par bobo le ven. 29 janv. 2016, 13:02, modifié 1 fois.
dwm — BÉPO — vim — “more is less !”
Moviuro
Elfe
Messages : 765
Inscription : dim. 17 juin 2012, 22:49

Re: [sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe

Message par Moviuro »

Y'a vim qui le propose : http://vim.wikia.com/wiki/Automatic_word_wrapping

J'ai pas mon PC sous la main, lais il y a une commande pour reformater un paragraphe déjà écrit.
psycho : Latitude E6430 ; BTRFS over LUKS, UEFI & secureboot
schizo : Acer 8942G ; KDE 4, BTRFS over LUKS ; W7 (prend la poussière)
toxo : i5-6600K, bspwm, VM W10 en PCI-passthrough
deadman : Lenovo Thinkcenter, OpenBSD 6.0-stable
popho.be : Kimsufi KS-3, FreeBSD 11.0
Loi de Murphy : Le jour où tu as besoin d'une backup, tu te dis que tu aurais dû en mettre en place
Venez sur IRC en plus du forum !
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17226
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe

Message par benjarobin »

Tout simplement la commande : wrap dans le paquet talkfilters
Si tu n'as pas envie d'avoir tout le "bordel" qui va avec ce paquet (dommage de ne pas l'avoir splitté), tu peux installer wrap-git qui a plus d'option (ce n'est pas le même programme)
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
bobo
Elfe
Messages : 593
Inscription : mar. 08 avr. 2014, 22:47

Re: [sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe

Message par bobo »

Super benjarobin ! :chinois: Grâce à ta piste j'ai trouvé fold (qui épargne un pipe). Je cherchais une ligne de commande adéquate pour rentrer dans ce script :

Code : Tout sélectionner

#!/bin/sh

if [ !  "$(dirname "$0")" = '.' ]; then
	echo "ERROR: this script must be run locally"
fi

CPL=80

for file in * ; do
	if [ -d $file ]; then
		echo "SKIPPED (dir)   $file"
	elif [ -x $file ]; then
		echo "SKIPPED (exec)  $file"
	else
		echo "REFORMATED      $file"
	fi
done
Celle-ci pourrait être pas mal :

Code : Tout sélectionner

fold -w 80 -s $file > $file
L'idéal serait d'avoir une première étape pour rassembler les paragraphes. Si vous aviez une idée à ce sujet aussi, j'aurais un début de truc que je pourrais exécuter dans ma procedure de release pour mon projet.
dwm — BÉPO — vim — “more is less !”
bobo
Elfe
Messages : 593
Inscription : mar. 08 avr. 2014, 22:47

Re: [sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe

Message par bobo »

Illustration du propos :

Code : Tout sélectionner

$ echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | fold -w 20
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxx

Code : Tout sélectionner

$ echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | fold -w 20 | fold -w 40
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxx
dwm — BÉPO — vim — “more is less !”
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17226
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe

Message par benjarobin »

Ne jamais lire un fichier et écrire dans le même fichier. Tu pourrais avoir des trucs bien étranges...
Tu dois passer par un fichier temporaire.
L'idéal serait d'avoir une première étape pour rassembler les paragraphes.
Cela veut dire quoi ? Tout mettre sur la même ligne puis appliquer fold ?
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
bobo
Elfe
Messages : 593
Inscription : mar. 08 avr. 2014, 22:47

Re: [sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe

Message par bobo »

benjarobin a écrit :Tout mettre sur la même ligne puis appliquer fold ?
Je dirais plus tout mettre sur « la même ligne sauf s'il y a une ligne blanche (critère pour distinguer les paragraphes) ». En fait, à la réflexion il y aurait aussi d'autre exceptions pour les conventions que j'utilise actuellement. Si je veux faire plus malin, il va falloir passer par du perl, je le crains.

Sinon il va falloir que je modifie ma façon de rédiger mes fichiers texte. Le markdown a l'air pas mal comme approche, du coup tu peux imaginer les exceptions qu'il faudrait…

Je vais marquer le sujet comme résolu. Merci.
dwm — BÉPO — vim — “more is less !”
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17226
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe (résolu)

Message par benjarobin »

Il suffit donc de remplacer un saut de ligne par un espace uniquement si le saut de ligne n'est pas suivi par un autre saut de ligne. Je pense que ceci devrait être assez triviale à faire avec perl / awk (mais je ne les connais pas assez)

Tu peux aussi le faire avec ce genre d'horreur :

Code : Tout sélectionner

sed -e ':a' -e 'N' -e '$!ba' -r -e 's|([^\n ]) *\n *([^\n ])|\1 \2|g'
Ou plus compacte

Code : Tout sélectionner

sed -r ':a;N;$!ba;s|([^\n ]) *\n *([^\n ])|\1 \2|g'
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
bobo
Elfe
Messages : 593
Inscription : mar. 08 avr. 2014, 22:47

Re: [sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe (résolu)

Message par bobo »

Voici mon script pour reformater mes fichiers texte d'aide :
https://git.framasoft.org/bobo/dwm-cust ... eformat.sh

Dans la fonction reformat() on trouve une série de 7 one-liners perl
dwm — BÉPO — vim — “more is less !”
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17226
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe (résolu)

Message par benjarobin »

Ceci est inutile | cat > ... ceci peut être remplacé par > ...
Le fichier temporaire ne devrait pas être hardcodé, mais tu devrait utiliser la fonction mktemp
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
bobo
Elfe
Messages : 593
Inscription : mar. 08 avr. 2014, 22:47

Re: [sh] cherche commande pour afficher le contenu d'un fichier avec CPL fixe (résolu)

Message par bobo »

benjarobin a écrit :Ceci est inutile | cat > ... ceci peut être remplacé par > ...
J'ignore ce flag de shellcheck pour conserver un format identique pour toutes les modifs' avec un pipe à la fin. Il est alors facile de commenter une ligne pour du debug.
benjarobin a écrit :Le fichier temporaire ne devrait pas être hardcodé, mais tu devrais utiliser la fonction mktemp
Ah, il faut que je regarde ça. Merci pour la piste. J'ai reçu un mail salé d'un mec de Suckless qui avait regardé le code de ma version 0.1 de dwm-custom. À ma réponse il m'a orienté sur quelques ressources (shellcheck, checkbashisms, http://pubs.opengroup.org/onlinepubs/96 ... #tag_18_10). Ça m'a bien aidé, mais il y a encore de la marge de progression ;)
dwm — BÉPO — vim — “more is less !”
Répondre