IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

[vi] Remplacer une suite d'espaces par un seul caractère


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 144
    Par défaut [vi] Remplacer une suite d'espaces par un seul caractère
    Bonjour,

    je souhaite dans un fichier, remplacer un suite d'espace par un seul caractère.

    j'ai testé s/ //g, mais chaque espace est remplacé, ce que je ne souhaite pas.

    Quel syntaxe utiliser?

    Merci

    Kondor76

  2. #2
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Je dirais s/ //
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 144
    Par défaut
    Citation Envoyé par Winnt Voir le message
    Salut,

    Je dirais s/ //

    Euh sans vouloir contredire, c'est ce que j'ai mis dans mon post...

    mais merci quand même

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Que souhaites-tu faire :
    Remplacer toutes les suites de X espaces par le caractere _ : exemple avec 5 espace Explication :
    • :%s : remplacer dans tout le fichier
    • / : separateur d'expression
    • \s : le caractere espace
    • \{5} : exactement 5 occurences de l'expression precedente (ici \s, donc 5 espaces)
    • g : plusieurs fois par ligne si besoin


    Remplacer tous les champs contenant au moins 2 espaces par le caractere _ : Explication :
    • :%s : remplacer dans tout le fichier
    • / : separateur d'expression
    • \s : le caractere espace
    • \s : un second caractere espace
    • \+ : au moins une occurence de la derniere expression (donc ici au moins un deuxieme espace, jusqu'a l'infini)
    • g : plusieurs fois par ligne si besoin


    Tout ceci dans vim bien sur.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 144
    Par défaut
    J'imagine que c'est pareil avec sed ?

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par kondor76 Voir le message
    J'imagine que c'est pareil avec sed?
    Oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $> sed 's/\s\s\+/_/g' mon_fichier_source > mon_fichier_sortie
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Sans vouloir contredire voici ce que tu mets dans ton post
    Citation Envoyé par kondor76
    j'ai testé s/ //g, mais chaque espace est remplacé, ce que je ne souhaite pas.
    Et voici ce que je proposais
    Citation Envoyé par winnt
    Je dirais s/ //
    Il y a une petite différence notée en rouge : s/ //g
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  8. #8
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Pour enrichir la base de connaissances :

    Ceci :
    fait encore autre chose : cela supprime uniquement le premier caractere espace de chaque ligne (enfin non, ca le remplace par "rien", et il suffit donc d'inserer le caractere voulu entre les deux /)
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  9. #9
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Merci de l'info gangsoleil.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  10. #10
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Une autre façon, qui a l'avantage d'être portable, de remplacer toute suite de plus d'un espace par un caractère, ici "_":


  11. #11
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 292
    Par défaut
    Ou plus simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/  */ /g' monFichier
    (rien avant s, 2 espaces seulement avant l'étoile et un espace en remplacament

  12. #12
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Ou plus simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/  */ /g' monFichier
    (rien avant s, 2 espaces seulement avant l'étoile et un espace en remplacament
    C'est plus simple en effet mais je ne suis pas sûr que ça réponde au problème posé, à moins qu'un seul espace soit considéré comme une suite d'espace.

  13. #13
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Ou plus simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/  */ /g' monFichier
    (rien avant s, 2 espaces seulement avant l'étoile et un espace en remplacament
    Ce n'est pas equivalent : dans ce cas, tu remplaces toutes les suites d'un ou plusieurs espaces par un seul.

    Pour remplacer une suite d'espace par autre chose, tu n'as a priori que deux expressions regulieres correctes (plus des composees de celles-ci) :
    • espace espace + --> espace suivi d'au moins un espace
    • espace espace espace * --> 2 espaces suivis de 0 ou plusieurs espace(s)


    Apres, ce n'est que de la syntaxe de remplacement,
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  14. #14
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par kondor76 Voir le message
    A l'origine, un script lancé en crontab qui utilise expect pour me remonter des informations formatées d'un équipement;
    Je suppose que tu veux dire que tu as un script dans une crontab, script qui appelle expect pour aller chercher des informations, et que c'est sur ce resultat que tu veux faire le remplacement ?

    Si oui, je te conseille de sauver les donnees dans un premier fichier (ma_source.txt), puis de faire le traitement (avec l'un des exemples d'ici, celui que tu preferes) en ecrivant la sortie dans un autre fichier (ma_sortie.txt).
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  15. #15
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 144
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Je suppose que tu veux dire que tu as un script dans une crontab, script qui appelle expect pour aller chercher des informations, et que c'est sur ce resultat que tu veux faire le remplacement ?

    Si oui, je te conseille de sauver les donnees dans un premier fichier (ma_source.txt), puis de faire le traitement (avec l'un des exemples d'ici, celui que tu preferes) en ecrivant la sortie dans un autre fichier (ma_sortie.txt).
    Super, merci pour toutes ces infos!!

    maintenant une autre question:

    A l'origine, un script lancé en crontab qui utilise expect pour me remonter des informations formatées d'un équipement; Cet équipement renvoie les informations avec des suites d'espace pour faire "colonne par colonne" (d'où mon post d'origine)
    Cette suite d'espace provoque au départ, un dépassement de largeur du "terminal" en cron (qui doit être j'imagine fixé à COLUMNS=80). Du coups la fin de certaines lignes s'affiche sur la ligne
    Je pensais qu'en supprimant les espace j'aurais tout bien formaté, ligne par ligne, mais non. L'origine doit être en amont.
    Dans mon script j'ai essayé de re-valorise ma variable COLUMNS, mais pas pris en compte.

    Comment faire? (si vous avez du mal à comprendre, dites le moi, c'est pas facile à expliquer).

    => Ce que j'ai
    vaaaaaaaaaaaaaaaaaal1 champs1 champs2 champs3 champs4
    champ5
    2 val2 champs1 champs2 champs3 champs4 champs5
    3- val3 champs1 champs2 champs3 champs4 champs5
    4 val4 champs1 champs2 champs3 champs4 champ5
    5- val5 champs1 champs2 champs3 champs4 champ5
    .....
    8- vaaaaaaaaaal8 champs1 champs2 champs3 champs4
    champ5
    ......
    12- vaaaaaaaaaaaaaaaaal5 champs1 champs2 champs3 champs4
    champ5

    ....
    20-val20 champs1 champs2 champs3 champs4 champ5

    ==> ce je que veux:

    1 vaaaaaaaaaaaaaaaaaal1 champs1 champs2 champs3 champs4 champ5
    2 val2 champs1 champs2 champs3 champs4 champ5
    3 -val3 champs1 champs2 champs3 champs4 champ5
    4 val4 champs1 champs2 champs3 champs4 champ5
    5- val5 champs1 champs2 champs3 champs4 champ5
    ....
    8- vaaaaaaaaaal8 champs1 champs2 champs3 champs4 champ5
    ........
    12- vaaaaaaaaaaaaaaaaal5 champs1 champs2 champs3 champs4 champ5

    20 val20 champs1 champs2 champs3 champs4 champ5

  16. #16
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Je ne pense pas du tout que le probleme vienne de la crontab, mais bien plus de expect (mouais) ou du mode de transfert utilise (telnet ?).

    Apres, la seule idee qui me vienne si tu ne trouves pas la source de ton probleme est un script awk qui compte le nombre de colonnes, et s'il n'y en a que 5 au lieu de 6, fusionne la ligne courrante avec la ligne suivante.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  17. #17
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 144
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Je ne pense pas du tout que le probleme vienne de la crontab, mais bien plus de expect (mouais) ou du mode de transfert utilise (telnet ?).

    Apres, la seule idee qui me vienne si tu ne trouves pas la source de ton probleme est un script awk qui compte le nombre de colonnes, et s'il n'y en a que 5 au lieu de 6, fusionne la ligne courrante avec la ligne suivante.
    Voici le ligne du expect:
    expect -c "spawn ssh -t -l $USER $EQUIPMENT $cmd; expect Enter;send \"$PASSWD\n\";expect eof" | sed 's/\s\s\+/|/g' | grep "^[1-9]" | sed 's/\*/-/g'


    Et quel genre le script? ne faut il pas compter colonne et ligne (le fichier de résultat doit en compter 20.

  18. #18
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,

    Ne peux tu faire directement du ssh avec une clé au lieu d'un mot de passe, ce qui permettrai de ne pas utiliser expect ?

    Sinon, as tu essayer de lancer le ssh (dans ta commande expect) en mode batch (et donc sans l'option -t) pour l'option batchmode (-o BatchMode=yes)

    Autre possibilité, dans ta commande ssh, tu force un pseudo-tty (option -t), as tu essayé de revalorisé le COLUMNS juste avant ta $cmd (donc dans le ssh) ?
    Ou bien, toujours dans le ssh, de faire un stty columns 100 (ou un autre nombre) ?

    Cordialement.

  19. #19
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Juste pour information, c'est bien la continuation du message du 21 février, non?
    http://www.developpez.net/forums/d13...nsion-fenetre/

    C'est bien toujours le même problème qui n'est pas réglé?

  20. #20
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 144
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Juste pour information, c'est bien la continuation du message du 21 février, non?
    http://www.developpez.net/forums/d13...nsion-fenetre/

    C'est bien toujours le même problème qui n'est pas réglé?
    oui c'est bien cela

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [Sed]Remplacer une série d'espaces par un délimiteur
    Par progfou dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 24/01/2011, 15h09
  2. [RegEx] Remplacer une suite d'espace blanc par un seul
    Par Sayrus dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2008, 11h31
  3. [Debutant]Remplacer une liste de valeur par une liste de val
    Par Sebbo dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 31/03/2006, 12h15
  4. remplacer une frame de menu par du JS
    Par 17mounir dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/08/2005, 17h39
  5. Réponses: 4
    Dernier message: 16/04/2004, 16h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo