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 :

Rechercher, incrémenter et remplacer dans un fichier texte


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2008
    Messages : 121
    Par défaut Rechercher, incrémenter et remplacer dans un fichier texte
    Salut,

    J'ai un fichier php dans lequel j'ai plusieurs occurrences de :
    tabindex="n"
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     tabindex="5"
    blabla
    tabindex="6"
    [...]
    tabindex="40"
    J'aimerais les incrémenter de 1 : le 5 deviendra le 6 etc...

    Est il possible de faire ça avec une ligne de commandes ou un petit script ?
    Merci pour votre aide.

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    "sed" aurait été parfait, s'il avait fait de l'arithmétique.
    Du coup, on se rabat sur "awk".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cat increment.txt 
    Salut,
     
    J'ai un fichier php dans lequel j'ai plusieurs occurrences de :
    tabindex="n"
    Par exemple :
    tabindex="5"
    blabla
    tabindex="6"
    [...]
    tabindex="40"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ awk -F'\"' '/tabindex=\"/{$2=$2+1;OFS=FS;} 1' increment.txt 
    Salut,
     
    J'ai un fichier php dans lequel j'ai plusieurs occurrences de :
    tabindex="1"
    Par exemple :
    tabindex="6"
    blabla
    tabindex="7"
    [...]
    tabindex="41"

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    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 347
    Par défaut
    Bonjour,

    Pour le fun, si on reprend l'exemple d'incrément de info sed:
    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
    #!/usr/bin/sed -f
     
    /tabindex="[0-9]\+"/! b
    h
    s/.*tabindex="\([^"]*\)".*/\1/
    :d
    s/9\(_*\)$/_\1/
    td
    s/^\(_*\)$/1\1/; tn
    s/8\(_*\)$/9\1/; tn
    s/7\(_*\)$/8\1/; tn
    s/6\(_*\)$/7\1/; tn
    s/5\(_*\)$/6\1/; tn
    s/4\(_*\)$/5\1/; tn
    s/3\(_*\)$/4\1/; tn
    s/2\(_*\)$/3\1/; tn
    s/1\(_*\)$/2\1/; tn
    s/0\(_*\)$/1\1/; tn
    :n
    y/_/0/
    G
    s/\([^\n]*\)\n\(.*tabindex="\)[^"]*\(".*\)/\2\1\3/
    et en exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cat xx.php
    Salut,
     
    J'ai un fichier php dans lequel j'ai plusieurs occurrences de :
    tabindex="n"
    Par exemple :
    tabindex="5"
    blabla
    tabindex="6"
    [...]
    tabindex="40"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ sed -f xx.sed xx.php
    Salut,
     
    J'ai un fichier php dans lequel j'ai plusieurs occurrences de :
    tabindex="n"
    Par exemple :
    tabindex="6"
    blabla
    tabindex="7"
    [...]
    tabindex="41"
    Bon, ici, c'est vraiment pour le fun...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2008
    Messages : 121
    Par défaut
    Cool, ça fonctionne bien ; voici la commande que j'ai exécuté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'\"' '/tabindex=\"/{$2=$2+1;OFS=FS;} 1' canvas_top.php_OLD > canvas_top.php
    Par contre, j'ai pas tout compris

    awk -F c'est bon, mais pour la suite... Quelqu'un pourrait me décomposer la commande svp ?
    Merci.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2008
    Messages : 121
    Par défaut
    Citation Envoyé par ClarusAD Voir le message
    Par contre, j'ai pas tout compris
    Du coup ça m'a un peu foutu la merde : tout ce qui était
    href="#"
    est devenu
    href="1"

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par ClarusAD Voir le message
    Du coup ça m'a un peu foutu la merde : tout ce qui était
    href="#"
    est devenu
    href="1"
    Dans le doute, il vaut toujours mieux utiliser une regexp aussi spécifique que possible!

    Peux-tu essayer avec clle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'\"' '/tabindex=\"[0-9]+\"/{$2=$2+1;OFS=FS;} 1' canvas_top.php_OLD > canvas_top.php
    Attention: je n'ai pas beaucoup testé...

    Peut-être faut-il ajouter ou supprimer des backslashes "\" (avant les guillemets, crochets, plus...)

Discussions similaires

  1. Rechercher/Remplacer dans un fichier texte externe
    Par Cmama dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/02/2010, 12h34
  2. Recherche, découpage de 'mots' dans un fichier texte
    Par sbibi dans le forum Scripts/Batch
    Réponses: 16
    Dernier message: 21/01/2010, 14h26
  3. Faire des remplacements dans un fichier texte
    Par DooSquare dans le forum C
    Réponses: 6
    Dernier message: 06/07/2007, 18h22
  4. remplacement dans un fichier texte
    Par ciberju dans le forum C
    Réponses: 5
    Dernier message: 25/08/2006, 09h36

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