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 :

Modification de fichier


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Escandil
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2003
    Messages : 84
    Par défaut Modification de fichier
    Bonjour,

    [Flood contexte]
    Dans le cadre d'une duplication de base oracle sur AIX, je suis amené a recopier des répertoires, puis a renommer et modifier certains fichiers.
    La tâche étant fastidieuse, et courante, je souhaite l'automatiser via un script shell.

    J'ai eu quelques soucis pour renommer mes fichiers et répertoires, mais à force de manipuler la commande sed, j'ai fini par aboutir au résultat suivant qui fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      ADB="$1"
      DB="$2"
       # ADB = <ancien_nom_base>
       #  DB = <nouveau_nom_base>
    [..]
      # Renomme les repertoires
      ls | grep $ADB | sed "s/\(.*\)$ADB\(.*\)$/mv \"&\" \"\1$DB\2\"/">mv.log
      ls | grep $ADB | sed "s/\(.*\)$ADB\(.*\)$/mv \"&\" \"\1$DB\2\"/" | sh
      # Renomme les fichiers
      find . -print | grep $ADB | sed "s/\(.*\)$ADB\(.*\)$/mv \"&\" \"\1$DB\2\"/">>mv.log
      find . -print | grep $ADB | sed "s/\(.*\)$ADB\(.*\)$/mv \"&\" \"\1$DB\2\"/" | sh
    #  cat mv.log
    [/Flood contexte]

    Il me faut maintenant modifier le contenu d'un fichier qui a l'aspect suivant :

    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
    Ligne à supprimer
    ...
    .. (1 à i lignes)
    ...
    Ligne à supprimer
    STARTUP NOMOUNT #dernière ligne a supprimer
    [Contenu à conserver]
    ...
    .. (1 à j lignes)
    ...
    [Contenu à conserver]
    CHARACTER SET WE8ISO8859P1
    ; #dernière ligne a conserver
    Ligne à supprimer
    ...
    .. (1 à k lignes)
    ...
    Ligne à supprimer
    ALTER TABLESPACE [..] ADD TEMPFILE [..]
    Fin du texte a supprimer
    Je ne sais pas vraiment comment procéder.
    Je pensais lire le fichier ligne par ligne jusqu'à la lecture de certains mots clefs, rediriger les lignes suivantes dans un fichier jusqu'à lecture des mots clefs suivants.
    Cette méthode me pose toutefois quelques problèmes :
    • Les paragraphes encadrer par mes lignes clefs peuvent avoir plusieurs occurences et je ne souhaite garder que la première
    • Le contenu à conserver ne doit pas être impacter par mes conditions
    • Je ne sais pas quel méthode utiliser pour lire mon fichier ligne par ligne

    De plus, il existe peut-être une solution plus simple que celle que j'envisage.
    Je vous demande donc un avis sur la question plutôt qu'un bout de shell clef en main.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Escandil Voir le message
    De plus, il existe peut-être une solution plus simple que celle que j'envisage.
    Boaf à ce niveau il vaut mieux automatiser vi. C'est un peu lourd à l'exécution mais c'est 100% garanti

    Exemple d'automation qui
    - va à la ligne 40
    - supprime la ligne
    - va à la ligne 80
    - rajoute "hello world"
    - va à la ligne 100
    - remplace "a" par "z"
    - sauvegarde et quitte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    vi fichier <<_EOT_ >/dev/null
    :40
    dd
    :80
    o
    hello world
    :100
    :s/a/z/g
    :wq
    _EOT_
    A partir de là, tu devrais y arriver tout seul. Si t'arrives à isoler les séquences vi qui répondent à ton problème c'est gagné.

    Citation Envoyé par Escandil Voir le message
    Je ne sais pas quel méthode utiliser pour lire mon fichier ligne par ligne
    Méthode pour lire un fichier: créer un canal numéroté sur le fichier puis lire le canal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    exec 3<fichier
    while read lig 0<&3
    do
        echo "ligne: [$ligne]"
    done
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre confirmé Avatar de Escandil
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2003
    Messages : 84
    Par défaut
    L'utilisation de vi ne convient pas à l'usage de ma fonction, du coup je suis passé par la seconde méthode.

    Avec quelques variables et quelques conditions, le tout fonctionne très bien.
    Merci.

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

Discussions similaires

  1. Modification de fichier XML avec XSLT
    Par osmoz dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/07/2005, 11h04
  2. [JAR]Modification de fichier dans un jar
    Par vberetti dans le forum Général Java
    Réponses: 14
    Dernier message: 13/06/2005, 17h56
  3. [langage] [Fichier]problème modification de fichier
    Par Melchisedec dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2004, 23h01
  4. [ICS FtpClient] Date modif de fichier et listage de dossier
    Par Ingham dans le forum Composants VCL
    Réponses: 8
    Dernier message: 13/06/2004, 19h54
  5. modification de fichier EOF
    Par scorbo dans le forum C
    Réponses: 9
    Dernier message: 28/11/2003, 11h35

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