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 :

Insertion de retour chariots avec sed


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut Insertion de retour chariots avec sed
    Bonjour,

    J'ai un petit probleme avec une commande SED. Le but est de faire une recherche de regexp et d'inserer un retour à la ligne a des endroits bien precis.
    J'ai trouver comment faire avec sed en ligne de commande :

    Fichier test :
    SED en ligne de commande :
    Avec ^J qui s'obtient en fesant <ctrl><V> + <ctrl><J>

    Cette commande remplace l'espace par un retour à la ligne afin d'obtenir :
    Le problème est que lorsque j'essais de scripter cette commande dans un KSH, le ^J est remplacer par un retour à la ligne dans le KSH ce qui provoque une erreur de syntaxe.

    Je suis sous KSH (AIX 5.2)

    Merci d'avance pour votre aide.
    A+

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Essaie voir un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #!/bin/ksh
     
    sed 's/ /
    /g' test

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 138
    Par défaut
    Comme ça peut-être :
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Merci mais ca ne marche pas. La solution proposée par _Mac_ provoque une erreur de parsing.
    Est ce que sed fonctionne en lui indiquant les codes Hexa des caracteres que l'on veut remplacer ? J'ai essayé avec une syntaxe x10 mais ça ne fonctionne pas

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s+ +\n+g" fichier > sortie

  6. #6
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Ca ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "Test Test" | sed 's+ +\n+g'
    TestnTest

  7. #7
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Test Test" | sed 'y, ,\n,'
    Ce qui en fait revient à faire un tr.
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  8. #8
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Citation Envoyé par Pouic Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Test Test" | sed 'y, ,\n,'
    Ce qui en fait revient à faire un tr.
    Tout a fait d'accord, mais je ce n'est qu'un exemple. J'ai simplifier le probleme afin d'exposer mon probleme.

    Je veut en fait faire un truc du genre remplacer l'espace par un retour à la ligne uniquement lorsque l'espace est suivi de "MOT" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test Test MOT Test TEst
    Donnera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Test Test
    MOT Test TEst
    A+

  9. #9
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    fic.sed
    # fic.sed
    s, \(MOT\),\
    \1,g

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ echo "Test Test MOT Test TEst" | sed -f fic.sed 
    Test Test
    MOT Test TEst
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par zoullou Voir le message
    Ca ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "Test Test" | sed 's+ +\n+g'
    TestnTest
    je te signale que j'ai mis des GUILLEMETS " " PAS des apostrophes ' ' ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s+ +\n+g" fichier > sortie

  11. #11
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Salut

    @souviron34 : Ca ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "Test Test" | sed "s+ +\n+g"
    TestnTest
    @Pouic : Ca fonctionne, mais ça impose d'avoir un fichier en plus, je ne peut pas scripter mon traitement avec un seul script

    A+

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    chez moi ceci fonctionne :

    fichier toto;txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ceci est un texte long qui sera découpé en un mot par ligne

    Avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed "s+ +\n+g" toto.txt > sortie.txt
    j'obtiens :

    sortie.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ceci
    est
    un
    texte
    long
    qui
    sera
    découpé
    en
    un
    mot
    par
    ligne
    Par contre pour le faire directement dans la ligne, je ne sais pas..

    Si, testé même sur Windows avec cygwin et Linux avec Redhat (via bash) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ echo "ceci est un texte long qui sera coupe" | sed "s+ +\n+g"
    ceci
    est
    un
    texte
    qui
    sera
    coupe
    tu fonctionnes sur quel shell ? sh ou ksh ou csh ou bash ?

  13. #13
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    @ Souviron : j'ai testé ta solution sous un linux avec bash pour voir : effectivement ça fonctionne. Mais sous OS X avec bash, non.
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  14. #14
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Je suis sous KSH (AIX) et ça ne fonctionne pas. Ca doit etre une vieille version de sed

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    il y a 2 possibilités de différence : ou c'est le shell ou c'est le sed.

    a) Regarder la doc de sed sur le système en question et voir.
    b) Regarder la doc du shell utilisé et voir

    J'aurais tendance à dire que c'est le shell, qui doit interprétrer le \n pour autre chose (à moins que Pouic ait essayé avec ksh aussi)



    en écrivant ça.. Bon sang mais c'est bien sûr.... Comme le montre ta sortie d'ailleurs....

    C'est le caractère \ ...

    Je ne sais plus si il faut le doubler \\ ou le mettre entre quote pour qu'il reste avec les shells style ksh...



    Trouve ce qu'il faut pour que le shell n'interprête pas le \ et essaye et ça devrait marcher


  16. #16
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    J'aurais tendance à dire que c'est le shell, qui doit interprétrer le \n pour autre chose (à moins que Pouic ait essayé avec ksh aussi)
    Oui, j'avais essayé avec ksh aussi sous Mac, ça ne fonctionnait pas.

    Je pense que le problème vient du fait que sous Linux, en général, c'est GNU Sed qui est installé, alors que sous *BSD, AIX, et compagnie, c'est le sed pas GNU qui tourne
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  17. #17
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Personellement j'essaierais qund meme ceci :

    Citation Envoyé par souviron34 Voir le message
    C'est le caractère \ ...

    Je ne sais plus si il faut le doubler \\ ou le mettre entre quote pour qu'il reste avec les shells style ksh...

    Trouve ce qu'il faut pour que le shell n'interprête pas le \ et essaye et ça devrait marcher

    car dans sa sortie il y a bien n entre Test et Test.

    Donc c'est le / qui a disparu ...

    Et vu la caractere () particulier du caractere il doit bien y avoir une maniere de passer une escape sequence sans qu'elle soit interpretee (je suis pas mal rouille (et je n'en ai pas sous la main)) pour sh et ksh et csh

    (effectivement sur Linux que ce soit sh ksh csh ou bash ca marche)

  18. #18
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    compte-tenu de la reponse de frp31 ici , ce serait donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ echo "ceci est un texte long qui sera coupe" | sed "s+ +\\\n+g"

  19. #19
    Invité de passage
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2025
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2025
    Messages : 1
    Par défaut Il faut quotter le retour chariot
    Hiho,
    Me semble que c'est ok si on quotte le retour à la ligne pour qu'il ne soit pas considérer comme une fin de ligne de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ... sed 's+ +\
    +' ...

Discussions similaires

  1. Insertion de contenu multiline avec sed
    Par ridan dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 28/06/2012, 14h50
  2. Insertion de retour chariot
    Par jjDai dans le forum Macro
    Réponses: 5
    Dernier message: 10/11/2010, 12h20
  3. Réponses: 2
    Dernier message: 11/11/2008, 13h45
  4. Probleme de retour chariot avec le module WriteExcel
    Par Jim_Nastiq dans le forum Modules
    Réponses: 3
    Dernier message: 20/08/2008, 16h23
  5. Réponses: 4
    Dernier message: 04/09/2007, 09h51

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