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 :

[SHELL] Script pour remplacer / garder un "#" en début de ligne


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 99
    Par défaut [SHELL] Script pour remplacer / garder un "#" en début de ligne
    Bonjour,

    je travaille sur un script pour installer des datasource et je bloque sur une partie ! voici le problème :

    j'ai un fichier avec les lignes ci dessous:

    #DS_DRIVER_NAME=oracle-11.2.0.4
    #DS_DRIVER_NAME=oracle-12.1.0.2
    DS_DRIVER_NAME=oracle-12.2.0.1
    et j'aimerais en fonction du driver que je veux mettre, soit enlever le # dans le cas mon driver correspond à celui d'une des lignes et laisser et/ou mettre un # dans le cas contraire.

    Par exemple si mon driver que je veux mettre est le 12.1.0.2, les lignes deviendraient ca :

    #DS_DRIVER_NAME=oracle-11.2.0.4
    DS_DRIVER_NAME=oracle-12.1.0.2
    #DS_DRIVER_NAME=oracle-12.2.0.1
    j'ai donc penser à utiliser la commande sed de cette façon :

    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
     
    #!/bin/bash
     
    read -p "driver :" driver
     
    while read line 
    do
     
    #driver présents dans les lignes
     
    drivdef=$(echo $driv_line| awk -F "=" '{print $2}' | awk -F "-" '{print $2}')
    	if [[ $driver == $drivdef ]] && [[ $^ == "#" ]]
    	then	
    		sed 's/^#/^ /' $line
    	elif [[ $driver != $drivdef ]] && [[ $^ != "#" ]]
    	then
    		sed 's/^ /^#/' $line
    	fi
    done <<< $(cat test.txt)
    mais cela me met cette erreur :

    Nom : erreurtest.PNG
Affichages : 113
Taille : 6,1 Ko

    je vous remercie par avance pour votre aide

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    je te propose un truc de ce style :
    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
    #!/bin/bash
     
    fichier="test.txt"
    liste=$(grep -Po "DS_DRIVER_NAME\s*=\s*oracle-[0-9.]+" "$fichier")
     
    echo -e "liste des drivers :\n$liste\n"
    while true; do
       read -p "driver : " driver
       if grep -P "^#?DS_DRIVER_NAME\s*=\s*oracle-$driver\s*$" <<< "$liste" >/dev/null; then
          echo "$liste" | awk -vCHOIX="$driver" '$0 ~ "^DS_DRIVER_NAME[ \t]*=[ \t]*oracle-" CHOIX "[ \t]*$" {print; next} {print "#" $0}' > "$fichier"
          break
       else
          echo "cette version du driver n'est pas dans la liste"
       fi
    done
    et son exécution :
    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
    $ ./script
    liste des drivers :
    DS_DRIVER_NAME=oracle-11.2.0.4
    DS_DRIVER_NAME=oracle-12.1.0.2
    DS_DRIVER_NAME=oracle-12.2.0.1
     
    driver : 5
    cette version du driver n'est pas dans la liste
    driver : 11.2
    cette version du driver n'est pas dans la liste
    driver : 11.2.0.4
     
    $ cat test.txt
    DS_DRIVER_NAME=oracle-11.2.0.4
    #DS_DRIVER_NAME=oracle-12.1.0.2
    #DS_DRIVER_NAME=oracle-12.2.0.1

  3. #3
    Membre très actif
    Homme Profil pro
    Intérimaire
    Inscrit en
    Mai 2017
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Intérimaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 99
    Par défaut
    Bonjour,

    c'est super , c'est exactement ce que je voulais faire !!!
    je vais prendre le temps de décortiquer la commande pour pouvoir la réadapter plus tard !!

    Merci beaucoup !

Discussions similaires

  1. code Apple script pour remplacer macro
    Par michel.l dans le forum VBA Word
    Réponses: 3
    Dernier message: 16/04/2008, 08h51
  2. [Shell] script pour jeu du pendu
    Par SISINE dans le forum Linux
    Réponses: 0
    Dernier message: 05/01/2008, 10h56
  3. [SHELL] script pour envoi mail automatique
    Par gloubi dans le forum Linux
    Réponses: 1
    Dernier message: 22/07/2007, 13h01
  4. Réponses: 8
    Dernier message: 31/05/2006, 12h33

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