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 :

Shell insert Balise au début et fin d'un morceau de code


Sujet :

Linux

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 97
    Points : 62
    Points
    62
    Par défaut Shell insert Balise au début et fin d'un morceau de code
    Bonjour à tous,

    je suis actuellement bloquée sur un script Shell sous Linux.

    J'ai un fichier .txt avec texte et du code. Le code est toujours précédé d'une tabulation. Voici un exemple de mon fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    blablablabla
             code
             code
             code
    blabalablabla
             code
             code
    balablablabla
    Ce que je souhaite c'est de rajouter "{code}" au début et la fin de chaque morceau de code. Je devrais donc obtenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    blablablabla
    {code}
             code
             code
             code
    {code}
    blabalablabla
    {code}
             code
             code
    {code}
    balablablabla
    Mais avec le code que j'ai il me trouve la première indentation et la dernière du fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TESTFILE=test.txt
     
    BLOCKNUM=$(awk '/  /,/  /{ print NR }' $TESTFILE|sed -n '1p;$p')
     
    set -- $BLOCKNUM; BLOCKSTART=$1; BLOCKEND=$2
    echo $BLOCKSTART
    echo $BLOCKEND
    Auriez-vous une idée d'amélioration de mon code svp ?

    Merci d'avance

  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
    entourer chaque ligne de code par un tag c est facile mais entourer un paragraphe de code en sed ou en awk (connais assez peu) je vois pas trop.

    il faut détecter que la ligne suivante est ou n'est pas du code a chaque fois. je verrais plutot un script sh ou un script perl faire ça

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 97
    Points : 62
    Points
    62
    Par défaut
    ma commande awk se trouve bien dans un fichier script.

    j'avais réussi a entouré chaque ligne de code par les balises {code} mais c'est pas trop ca que je cherche donc je me creuse encore la tete !

    Le perl, j'ai jamais touché de ma vie, je ne connais pas du tout !

  4. #4
    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
    si le but est de répondre a ton probleme, en perl ça donne ça :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    #! /usr/local/bin/perl
     
    $SEP = "/";
    my $INPUT_FILE = $SEP."home".$SEP."xxx".$SEP."test.txt";
    my $OUTPUT_FILE = $SEP."home".$SEP."xxx".$SEP."test_outp.txt";
    my $STATE = "NO_STATE";
     
    open (HANDLE_INPUT_FILE, $INPUT_FILE) || die "open problem of $INPUT_FILE : $!";
    open (HANDLE_OUTPUT_FILE, ">$OUTPUT_FILE") || die "open problem of $OUTPUT_FILE : $!";
    while ( my $line = <HANDLE_INPUT_FILE> )
    {
     chomp $line;
     if ($STATE eq "STATE_1")
     {
      if ($line =~ "\t")
      {
       print HANDLE_OUTPUT_FILE "$line\n";
      }
      else
      {
       print HANDLE_OUTPUT_FILE "{code}\n$line\n";
       $STATE = NO_STATE;
       next;
      }
     }
     if ($STATE eq "NO_STATE")
     {
      if ($line =~ "\t")
      {
       print HANDLE_OUTPUT_FILE "{code}\n$line\n";
       $STATE = STATE_1;
      }
      else 
      {
       print HANDLE_OUTPUT_FILE "$line\n";
      }
     }
    }
    close(HANDLE_INPUT_FILE);
    close(HANDLE_OUTPUT_FILE);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    => cat test.txt
    blablabla
            code
            code
            code
    blablabla
            code
            code
            code
    blablabla
    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
    => tes.pl
    => cat test_outp.txt 
    blablabla
    {code}
            code
            code
            code
    {code}
    blablabla
    {code}
            code
            code
            code
    {code}
    blablabla

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 97
    Points : 62
    Points
    62
    Par défaut
    Salut,
    je te remercie. Je vais tester ca demain matin ! Je te tiens au courant !!

    A+

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sed '/^[a-Z]/{1!s//{code}\n&/;{
    $!a{code}
    }
    }' ton_fichier
    ce n'est bien sûr pas ausi fiable que le script d'Ashin

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 97
    Points : 62
    Points
    62
    Par défaut
    Merci a vous pour vos réponses,

    le script en perl fonctionne parfaitement donc merci bcp.

    Par conte, j'ai un peu de mal a comprendre la commande sed. Surtout la seconde partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {1!s//{code}\n&/;{$!a{code}}
    Dites moi si je me trompe :
    1! = Si la condition "^[a-Z]" est respectée, alors on met "/{code}\n&"
    $! = Sinon, on met "a{code}"

    Je pense pas que ça doit être ça, car c'est pas trop le principe d'un sed.
    Si vous pourriez m'éclairer sur cette commande car je voudrais bien la comprendre quand mm !

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    /^[a-Z]/ = si la ligne commence par une lettre (minuscule ou majuscule) => pas par une tabulation
    et
    1! = si ce n'est pas la première ligne
    $! = si ce n'est pas la dernière ligne

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

Discussions similaires

  1. [Shell] Suppression d'espace en début et fin de colonne
    Par nemo89 dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 29/05/2013, 13h44
  2. [WD-2000] Insérer des balises <p> et </p> en début et fin de paragraphe
    Par Nerva dans le forum VBA Word
    Réponses: 5
    Dernier message: 03/12/2010, 16h29
  3. transférer une valeur du début à la fin
    Par arti2004 dans le forum Langage
    Réponses: 12
    Dernier message: 24/05/2006, 19h19

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