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 :

Sed + File not found : Problème de syntaxe ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Par défaut Sed + File not found : Problème de syntaxe ?
    Bonjour, j´ai un petit projet perso mais je bute avec sed.
    J´ai le code 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
    22
    23
    24
    #!/bin/sh
    # Recherche ip actuel
    check_ip="1.2.3.4"
    check_new=`grep -oP 'NEW=\K.*' ip_current.txt`
     
    #Creation fichier ip_current.txt si n´existe pas
    if [ -e ip_current.txt ]
    then
        touch ip_current.txt
    fi
    #check ips en ip_current.txt
    if [ $check_ip  != $check_new ]; then
        echo "IP Differente"
        echo "NEW=$check_ip" > ip_current.txt
        echo "OLD=$check_new" >> ip_current.txt
        sed 's/NEW=$check_new/NEW=$check_ip/g' ip_current.txt
     
        #sed 's/NEW=$check_new/NEW=$check_ip/g' /volume1/@appstore/DNSServer/named/etc/zone/master/local
        sed 's/OLD=\K.*/$check_ip/g' ./volume1/@appstore/DNSServer/named/etc/zone/master/local
     
     
    else
        echo "Pas de changement de IP"
    fi
    C´est le sed suivant qui pose probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/OLD=\K.*/$check_ip/g' ./volume1/@appstore/DNSServer/named/etc/zone/master/local
    Il ne trouve pas le fichier "local", donc je me demande comment placer cette commande pour effectuer l´action.
    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Bonjour,

    Ma première supposition serait que, comme tu utilises un chemin relatif (commençant par ./) pour accéder à ton fichier, tu ne te trouves pas là où tu penses être quand le script s'exécute.
    Il serait plus judicieux d'indiquer un chemin absolu (partant de la racine du système)
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Par défaut
    Bizarre, mais je comprends pas sed. Je vais reprendre un exemple simple pour eviter la confusion.

    Le code est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    check_ip="1.2.3.4"
    check_old="192.168.1.111"
        echo "NEW=$check_ip" > ip_current.txt
        echo "OLD=$check_old" >> ip_current.txt
        sed 's/$check_old/$check_ip/g' '/volume1/@appstore/DNSServer/named/etc/zone/master/local'
    Avec sed je dois devoir remplacer "check_ip="1.2.3.4" " par " check_old="192.168.1.111" ".
    dans le fichier "/volume1/@appstore/DNSServer/named/etc/zone/master/local"
    En lançant le script j´ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ORIGIN local.
    $TTL 86400
    local. IN SOA ns.local. mail.local. (
            1
            43200
            180
            1209600
            10800
    )
    local.  NS      ns.local.
    ns.local.       A       192.168.1.111
    Il m´affiche ce que j´ai dans le fichier mais fait pas le remplacerment.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    les variables shell ne sont pas développées entre apostrophes :[
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ var='foo bar baz'
    $ echo "$var"
    foo bar baz
    $ echo '$var'
    $var
    donc, sed ne trouve de correspondance, et ne fait en conséquence pas de substitution.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Par défaut
    J´ai fait des modification comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    check_ip='1.2.3.4'
    check_old='192.168.1.111'
        echo '$check_ip' > ip_current.txt
        echo '$check_old' >> ip_current.txt
        sed 's/'$check_old'/'$check_ip'/g' /volume1/@appstore/DNSServer/named/etc/zone/master/local
    Maintenant il m´affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ORIGIN local.
    $TTL 86400
    local. IN SOA ns.local. mail.local. (
            1
            43200
            180
            1209600
            10800
    )
    local.  NS      ns.local.
    ns.local.       A       1.2.3.4
    Mais lorsque je regarde dans le fichier les modifications ne sont pas prises en compte.

  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 superthx Voir le message
    Mais lorsque je regarde dans le fichier les modifications ne sont pas prises en compte.
    En standard (et en gros), sed lit le contenu d'un fichier, fait les modifications et écrit le résultat des modifications sur la sortie standard (stdout).

    Si tu veux que sed modifie le contenu d'un fichier, il faut utiliser l'option -i (cf. man sed).

    Attention, certaines versions de sed ont une option -i sans argument et d'autres avec argument obligatoire: -i <backup extension>.

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    Par défaut
    Bon après, le \K ne fonctionne pas en sed, dans une discussion précédente, la réponse était pour grep pas sed.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bon après, le \K ne fonctionne pas en sed, dans une discussion précédente, la réponse était pour grep pas sed.
    Non mais le code precedent me va.
    Ce que j´essai de faire et de changer dans le fichier local juste une ip par une autre.

Discussions similaires

  1. Problème "Error 404: SRVE0190E: File not found"
    Par ibousan dans le forum Websphere
    Réponses: 1
    Dernier message: 02/01/2012, 14h00
  2. Réponses: 0
    Dernier message: 09/06/2010, 15h49
  3. [Kylix] Erreur "File not Found : Windows.dcu"
    Par derrick23_2003 dans le forum EDI
    Réponses: 4
    Dernier message: 27/12/2005, 11h18
  4. Exception: TXMLDocument.LoadXMLFile File not found
    Par powerlog dans le forum XMLRAD
    Réponses: 12
    Dernier message: 09/08/2005, 10h29
  5. [Quartz][Tomcat] Jobs.xml file not found exception
    Par Arnaud Giuliani dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 05/08/2005, 09h20

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