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 :

Konsole:Commande Sed insertion.


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif Avatar de KISEKI
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 23
    Par défaut Konsole:Commande Sed insertion.
    Bonjour,

    Donc j'ai un petit problème.

    Par exemple j'ai un fichier:

    La
    Lo
    La
    Lo
    La

    Je voudrais rajouter au premier La un text, donc je suis partie avec la commande sed.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '/La/' "a\Dans le nord il fait froid" exfichier
    .
    Voici le résultat et qu'il me met à chaque La.
    La
    Dans le nord il fait froid
    Lo
    La
    Dans le nord il fait froid
    Lo
    La
    Dans le nord il fait froid

    Donc je trouve pas d'expression régulière pour prendre juste le premiers ou le deuxième La par exemple la seul solution qui marche c'est d'utiliser les numéros de lignes je veux passer par les motif.

    Cordialement KISEKI.

  2. #2
    Expert confirmé

    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
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    $ cat glop
    La
    Lo
    La
    Lo
    La
     
    $ sed ':z;N;$!bz;s/La/&\nxxxxxxx/M1' glop 
    La
    xxxxxxx
    Lo
    La
    Lo
    La
     
    $ sed ':z;N;$!bz;s/La/&\nxxxxxxx/M2' glop 
    La
    Lo
    La
    xxxxxxx
    Lo
    La
     
    $ sed ':z;N;$!bz;s/La/&\nxxxxxxx/M3' glop 
    La
    Lo
    La
    Lo
    La
    xxxxxxx
     
    $

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    $ cat glop
    La
    Lo
    La
    Lo
    La
     
    $ sed ':z;N;$!bz;s/La/&\nxxxxxxx/M1' glop 
    La
    xxxxxxx
    Lo
    La
    Lo
    La
     
    $ sed ':z;N;$!bz;s/La/&\nxxxxxxx/M2' glop 
    La
    Lo
    La
    xxxxxxx
    Lo
    La
     
    $ sed ':z;N;$!bz;s/La/&\nxxxxxxx/M3' glop 
    La
    Lo
    La
    Lo
    La
    xxxxxxx
     
    $
    Bonjour zipe31,

    Peux-tu STP expliquer la signification de chacun des membres de ta combinaison suivante :

    Dans ma version de sed 4.1.5, je n'ai pas toutes ces options, outre que je suis débutant et aimerais comprendre pas à pas la signification des choses

    D'ailleurs, en testant cela tout seul, j'ai compris que si je souhaite ajouter des xxxx avec espace sur la même ligne, après le premier "La" (et pareil pour les autres !), il m'a suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed ':z;N;$!bz;s/La/& xxxx/M1' glop
    et si je veux le faire avec vi directement dans un fichier, alors c'est encore plus facile :


  4. #4
    Expert confirmé

    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
    Par défaut
    Salut,

    Citation Envoyé par bras39 Voir le message
    Bonjour zipe31,

    Peux-tu STP expliquer la signification de chacun des membres de ta combinaison suivante :

    Dans ma version de sed 4.1.5, je n'ai pas toutes ces options, outre que je suis débutant et aimerais comprendre pas à pas la signification des choses
    [/code]
    Si si, toutes ces options existent dans ta version de sed et même dans les versions antérieures.

    En fait dans ce que tu cites, seuls N, ! et b sont des options ou paramètres de sed, "$" est dans ce cas une adresse désignant la dernière ligne, et ":z" une étiquette.

    Il faut savoir que sed est un éditeur de flux, qui traite par conséquent les lignes d'un fichier passé en paramètre une par une en les plaçant dans ce qu'on a coutume d'appeler l'espace de travail (ou mémoire principale).

    Donc pour résumer :

    :z
    Étiquette qu'on nomme "z" (on peut aussi lui donner un nom, par exemple ":boucle).
    On place une référence dans notre script afin de pouvoir y retourner et créer ainsi une boucle qui nous permettra de nous y brancher quand une condition sera satisfaite, ou pas selon ce qu'on doit traiter...

    N
    Commande qui ajoute dans l'espace de travail la ligne suivante. A ce moment là l'espace de travail contient la 1ère ligne, suivie de la seconde séparées par le caractère de saut de ligne "\n"

    $!
    $ représente l'adressage de la dernière ligne.
    ! représente la négation.
    Les 2 combinés s'interprètent ainsi : si la dernière ligne n'est pas dans l'espace de travail, faire ce qui suit...

    bz
    b commande de branchement
    z l'étiquette où se brancher
    Donc si la dernière ligne n'est pas dans l'espace de travail, se brancher à l'étiquette "z", et ainsi de suite tant qu'on n'aura pas atteint la dernière ligne.

    Une fois la dernière ligne atteinte, tout le contenu du fichier se trouve dans la mémoire principale, et est vu comme une seule et même ligne avec le caractère "\n" comme séparateur de chaque ligne initiale.

    A partir de là le traitement peut être effectué avec le reste des commandes (s/La/&\nxxxxxxx/M1).

    Ici la subtilité réside dans l'utilisation du "flag" (drapeau) "M", combiné à l'autre flag "n" (ou "n" est un entier) qui permet de différencier chaque ligne individuellement au sein même de la mémoire principale.


  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Par défaut
    Merci beaucoup, j'ai bien compris la combinaison de tout cela...

Discussions similaires

  1. Problème avec la commande sed
    Par JUSTIN Loïc dans le forum Linux
    Réponses: 2
    Dernier message: 05/09/2006, 10h17
  2. Ligne de commande : erreur INSERT
    Par webrider dans le forum Requêtes
    Réponses: 7
    Dernier message: 30/08/2006, 14h13
  3. Aide sur les commandes sed et awk
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 20/06/2006, 08h22
  4. La commande sed
    Par ajsd0208 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 26/04/2006, 14h34
  5. Commande SED
    Par pierregag dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 17/03/2006, 12h51

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