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 :

[tcsh] Empêcher le retour à la ligne


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 45
    Points : 27
    Points
    27
    Par défaut [tcsh] Empêcher le retour à la ligne
    Bonjour,

    J'ai un problème avec la commande sed : il a tendance à m'interpréter les espace comme des retour à la ligne.

    fichier txt:
    01 toto
    02 titi
    03 tutu
    04 tyty

    script.csh :
    /bin/tcsh
    set var = `sed '/02/,/03/' p' ./fichier.txt
    foreach ligne ($var)
    echo $ligne
    end

    resultat attendu:
    02 titi
    03 tutu

    resultat obtenu:
    02
    titi
    03
    tutu
    Pour résumer : je voudrais que $ligne[1] = "02 titi" mais j'obtiens $ligne[1] = 02 et $ligne[2] = titi...

    Merci

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 280
    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 280
    Points : 12 729
    Points
    12 729
    Par défaut
    Bonjour,
    Le problème n'est pas sur sed mais sur le foreach de tcsh, c'est lui qui considère l'espace comme séparateur de paramètre.
    Cordialement.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 45
    Points : 27
    Points
    27
    Par défaut
    Merci,

    Et comment contourner le problème ?

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Quel est ton vrai but ? Parce que si c'est pour réarranger un fichier texte pour donner un autre fichier texte, tu peux tout faire avec grep, sed, awk, etc.
    Sinon, pourquoi ne pas alimenter une boucle while avec ton fichier ? "While read champ1 ligne; do echo $champ1;done <fichier.txt" ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 45
    Points : 27
    Points
    27
    Par défaut
    Je vais faire sans doute hérisser des cheveux, ce ne doit pas être la solution la plus propre mais j'ai réussi à avoir ce que je voulais en modifiant mon script :

    /bin/tcsh
    set var = `sed '/02/,/03/' p' ./fichier.txt | sed 's/\ /_/g p'`
    foreach ligne ($var)
    set ligne = `echo $ligne | sed -e 's/_/\ /g p'`
    echo $ligne
    end
    Je laisse la discussion ouverte encore quelques heures si quelqu'un a une version moins brouillonne.

    Merci pour l'aide

  6. #6
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Je suis très étonné que la commande sed (seule, sans tenir compte de ton script) te renvoie le résultat escompté

    Normalement telle qu'elle est notée dans ton script elle devrait te retourner ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sed '/02/,/03/p' fichier
    01 toto
    02 titi
    02 titi
    03 tutu
    03 tutu
    04 tyty
    Dans la mesure où tu emploi de flag p sans l'option -n

    Pour avoir juste les lignes entre celles contenant 02 et 03 la syntaxe serait plutôt sed -n '/02/,/03/p' fichier
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 45
    Points : 27
    Points
    27
    Par défaut
    Comme expliqué plus haut, le problème ne vient pas de la commande sed qui me renvoi bien le résultat que tu me donnes, mais de foreach qui n’interprète pas les espaces comme je l'attendais.

    Sur ce, je mets le mail en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Empécher le retour à la ligne de ma <div>
    Par Tendhor57 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 20/06/2013, 12h47
  2. Empêcher le retour à la ligne entre deux formulaires
    Par piotrr dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 03/02/2009, 17h02
  3. [OpenOffice][Texte] Empêcher deux tokens d'être séparés par retour à la ligne
    Par Jeddo dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 27/09/2007, 09h46
  4. Empêcher le retour à la ligne
    Par ozzmax dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 11/05/2006, 19h38
  5. Empêcher le retour á la ligne entre des balises <Hx> e
    Par thomas_chamas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 29/11/2004, 16h39

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