[sed]couper une ligne tous les n mots (résolu)

Applications, problèmes de configuration réseau
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

[sed]couper une ligne tous les n mots (résolu)

Message par GuilouV »

Bonjour,

Je me suis enfin décidé à utiliser conky et j'y ai implémenté une fonction affichant le nombres de mise à jour disponibles ainsi que leurs noms. Par souci d'esthétique j'aimerai que les mises à jour s'affichent à raison de 3 noms par ligne.

Voici la commande qui me permet d'obtenir les noms des mises à jour (et seulement leur nom);

Code : Tout sélectionner

yaourt -Qua | sed ':s;N;s/\n//; s/aur//g; s/core//g; s/extra//g; s/community//g; s/archlinux//g; s/multilib//g; s/[0-9]//g; s/-//g; s/[.]//g; s/://g; s/(basedevel)//g; s/[/]//g;bs' > /tmp/maj
Les noms sont ainsi envoyés dans le fichier /tmp/maj dans lequel ils sont les uns à la suite des autres (sur une seule ligne). J'aimerai, à partir de ce fichier, afficher plusieurs lignes de trois noms chacune.

Pour finir en éclairant mes propos au mieux voici un exemple..
Actuellement, mon fichier /tmp/maj est celui-ci:

Code : Tout sélectionner

ffmpeg libmysqlclient lockdev patch wine xterm conkywx ldlsb
J'aimerai alors obtenir ceci (avec une commande sed ou autre):

Code : Tout sélectionner

ffmpeg libmysqlclient lockdev
patch wine xterm
conkywx ldlsb
Merci
Dernière modification par GuilouV le dim. 30 sept. 2012, 21:35, modifié 1 fois.
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [sed]couper une ligne tous les n mots

Message par benjarobin »

Déjà en plus propre :

Code : Tout sélectionner

package-query -AQu -f "%n"
Le script complet

Code : Tout sélectionner

#!/bin/bash

cpt=0
package-query -AQu -f "%n" | while read pkg ; do

    if [ $cpt -eq 2 ]; then
        echo "$pkg"
        cpt=0
    else
        printf "%s" "$pkg "
        cpt=$((cpt + 1))
    fi

done
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

Re: [sed]couper une ligne tous les n mots

Message par GuilouV »

Super, merci.
J'avais pensé au script mais ne m'y était pas vraiment penché, je cherchais une solution directe avec sed.

En plus je ne connaissais pas la commande package-query -AQu -f "%n" qui est vraiment parfaite ici.
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [sed]couper une ligne tous les n mots (résolu)

Message par benjarobin »

En faite c'est possible avec sed, je n'y avait pas pensé du premier coup

Code : Tout sélectionner

package-query -AQu -f "%n"| tr '\n' ' ' | sed -r "s|([a-zA-Z0-9_-]+) ([a-zA-Z0-9_-]+) ([a-zA-Z0-9_-]+) |\1 \2 \3\n|g"
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
GuilouV
Elfe
Messages : 539
Inscription : jeu. 25 nov. 2010, 15:34

Re: [sed]couper une ligne tous les n mots (résolu)

Message par GuilouV »

Magnifique.
Peux-tu juste m'expliquer le fonctionnement de sed dans ce cas pour que je puisse progresser dans son utilisation car je débute avec et j'avoue que je suis un peu perdu sur cette commande spécifique.
Merci.
[ Vaio S (VJS131X0211B) ]==[ Arch64 i3 Bépo ]==[ KISS spirit ]
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [sed]couper une ligne tous les n mots (résolu)

Message par benjarobin »

Ta question est plutôt sur le fonctionnement des regex, rien de spécial ici avec sed : On cherche et capture 3 éléments (entre parenthèse) que l'on affiche grâce à \1, \2 ou \3.
\1 correspond au premier groupe de parenthèse, \2 au 2ième...
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Répondre