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

Linux Discussion :

sed : difference csh/sh pour ajout de ligne


Sujet :

Linux

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut sed : difference csh/sh pour ajout de ligne
    Bonjour,

    Soit 'fichier.txt' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    nadal
    federer
    monfils
    je veux utiliser la commande d'ajout de ligne 'a\' de 'sed' pour rajouter les 2 lignes :

    apres la ligne 'federer'

    sous sh, je dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed '/federer/a\
    > wimbledon\
    > garros' fichier.txt
    Resultat OK :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    nadal
    federer
    wimbledon
    garros
    monfils
    Pour obtenir le meme resultat sous csh, je dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sed '/federer/a\\
    ? wimbledon\\
    ? garros' fichier.txt
    Pourquoi dois-je doubler le '\' ?
    Est-ce une histoire de shell, de sed (j'utilise pourtant la meme version GNU version 4.0.7 sous Linux).

    J'aimerais comprendre cette subtilite.

    merci pour votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    je pense que c'est du à l'interprétation des caractères spéciaux (ici \)
    il faut donc ajouter '\' devant chaque caratères spéciaux ( \, (, ) ....) en csh.

    je pensais qu'en sh aussi

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par larrun Voir le message
    Pourquoi dois-je doubler le '\' ?
    Est-ce une histoire de shell, de sed (j'utilise pourtant la meme version GNU version 4.0.7 sous Linux)
    Soyons logique. Le sed est un programme indépendant. Donc sa façon de travailler ne changera pas quel que soit ton shell et ça, c'est une certitude.

    Toutefois, entre ce que tu tapes, et ce que le sed reçoit, il y a l'interpréteur qui analyse et qui interprète (d'où son nom). Et ça, ça dépend donc de sa syntaxe. Ashin a raison. Il est fort probable que le csh (je peux pas vérifier, je ne le connais pas) donne une signification différente au backslash ce qui t'oblige à le doubler pour que le sed reçoive la bonne chaine. Mais si tu mettais un affichage de la chaine reçue dans le sed, tu verrais que dans les 2 appels, la chaine traitée est la même.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Février 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    merci pour votre interet.

    en-fait, j'ai simplifie le probleme

    sous sh, des qu'on ouvre un simple quote ('), on peut faire un retour charriot sans probleme, pas besoin de backslash (\) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $echo '
    > toto'
     
    toto
    si on utilise un backslash dans ces conditions (encadre par 2 simples quotes), il est pris litteralement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo '\
    > toto'
    \
    toto
    Par-contre en csh, meme entre simple quote, il faut un backslash pour faire un retour chariot et donc il n'est pas pris litteralement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    echo '
    Unmatched '.
     
    echo '\
    ? toto'
     
    toto
    pour en revenir au probleme du sed ...
    la commande 'append' est 'a\[retour chariot]'

    En sh le retour chariot n'a pas besoin du '\' donc ce dernier est pris litteralement.

    En csh, il faut doubler car le premier permet le retour chariot.

    c'est complique ...

  5. #5
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par larrun Voir le message
    c'est complique ...
    pas vraiment...

    sh est la base, la définition même du shell

    Il y a ensuite des surcouches : csh, ksh, bash..

    Ces surcouches appelle la couche de base..

    D'où un niveau supplémentaire..

Discussions similaires

  1. Création de boutons pour ajouter une ligne
    Par jenor dans le forum Général VBA
    Réponses: 2
    Dernier message: 23/06/2015, 11h57
  2. [WD16] problème pour ajouter une ligne dans la table
    Par T1929D dans le forum WinDev
    Réponses: 3
    Dernier message: 02/08/2013, 23h39
  3. Macro pour ajouter une ligne dans une feuille automatiquement
    Par nianko dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/11/2010, 10h52
  4. Requete pour ajouter des lignes à ma table
    Par dodo91 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/06/2009, 11h34
  5. Comment faire pour ajouter une ligne seulement !
    Par Fredri dans le forum Access
    Réponses: 1
    Dernier message: 26/12/2005, 12h44

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