Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
Google Site



De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici.

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered by Powered by Google
 
Thread Tools Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 05-26-2009
Registered User
 

Join Date: Mai 2009
Messages: 6
requête de recherche et de remplacement

Bonjour ppl,

Je suis en train d'écrire un script qui trouve plusieurs mots match et de le remplacer par de nouveaux mots.
J'ai server.conf fichier qui ressemble à

Code:
### Welcome to server ###
### Server address and port ###
 
Server=127.0.0.1 
### Replace Server=0.0.0.0 ###
 
ServerPort=0
### Replace ServerPort=1 ####
### Enable Server ##
 
Enable Server=1
 
### Replace Enable Server=0 ###
### END OF FILE ##

-------------------------------------------------- ---------
J'ai écrit le code pour elle, comme indiqué ci-dessous

Code:
FILE="/opt/server.conf"
NEW_FILE="/opt/new_server.conf"
        
 IFS=""
        for line in `cat ${FILE}`; do
        #echo ${line}
        if [ -n "`echo ${line} | grep 'Server=127.0.0.1'`" ]
        then
                 echo ${line} | sed 's|Server=127.0.0.1|Server=0.0.0.0|g' >>$NEW_FILE
        elif [ -n "`echo ${line} | grep 'ServerPort=0'`" ]
        then
                echo ${line} | sed 's|ServerPort=0|ServerPort=1|g' >>$NEW_FILE
        elif [ -n "`echo ${line} | grep 'Enable Server=1'`" ]
        then
                echo ${line} | sed 's|Enable Server=1|Enable Server=0|g' >>$NEW_FILE
        else
                echo ${line} >>$NEW_FILE
        fi
        done

Mais quand je utiliser mon script, il ne remplace que le premier match (Server \u003d 0.0.0.0). Deux autres matches doesnt changement.
Je ne sais pas ce problème avec mon code.

Quelqu'un peut-il m'aider sur ce sujet?
Merci d'avance

Dernière édition par lightdensity; au 05.26.2009 01:14 PM..
Liens Sponsorisés
  #2 (permalink)  
Old 05-26-2009
devtakh devtakh is offline Forum Advisor  
Registered User
 

Join Date: Oct 2007
Lieu: Bangalore
Posts: 598

Code:
sed '/Server=127.0.0.1/{s//Server=0.0.0.0/g}
/ServerPort=0/{s//ServerPort=1/g}
/Enable Server=1/{s//Enable Server=0/g}
' /opt/server.conf > /opt/new_server.conf

-Devaraj Takhellambam
  #3 (permalink)  
Old 05-26-2009
Registered User
 

Join Date: Mai 2009
Messages: 6
Citation:
Posté par devtakh View Post
Code:
sed '/Server=127.0.0.1/{s//Server=0.0.0.0/g}
/ServerPort=0/{s//ServerPort=1/g}
/Enable Server=1/{s//Enable Server=0/g}
' /opt/server.conf > /opt/new_server.conf

-Devaraj Takhellambam
merci pour vos réponses .. En fait, je suis de nouveau à des scripts shell

Code:
FILE="/opt/server.conf"
NEW_FILE="/opt/new_server.conf"
        
 IFS=""
        for line in `cat ${FILE}`; do
        #echo ${line}
        if [ -n "`echo ${line} | grep 'Server=127.0.0.1'`" ]  #grep command searches for right string
        then
                 echo ${line} | sed 's|Server=127.0.0.1|Server=0.0.0.0|g' >>$NEW_FILE
        elif [ -n "`echo ${line} | grep 'ServerPort=0'`" ]
        then
                echo ${line} | sed 's|ServerPort=0|ServerPort=1|g' >>$NEW_FILE
        elif [ -n "`echo ${line} | grep 'Enable Server=1'`" ]
        then
                echo ${line} | sed 's|Enable Server=1|Enable Server=0|g' >>$NEW_FILE
        else
                echo ${line} >>$NEW_FILE
        fi
        done

Alors, comment savoir à qui le droit de chaîne?

merci
  #4 (permalink)  
Old 05-26-2009
BubbaJoe's Avatar
Registered User
 

Date d'inscription: octobre 2008
Localisation: St Louis
Messages: 154
Votre IFS est mal réglé. L'IFS \u003d "" dit il n'y a pas de séparateur de sorte que le fichier est lu ensemble. Vous ne pouvez utiliser l'IFS est-il est en fait un séparateur entre chaque champ. Cat $ FILE Alors ne vous donnera pas ligne par ligne, il vous donnera tout le fichier comme un domaine à la fois. Ainsi, seulement 1 fois correspondants. Puisque vous voulez vraiment voir à chaque ligne un dossier, vous devez utiliser awk ou sed pour trouver et remplacer le texte.

Donc, ce sera pour vous le travail qui a été envoyé par devtakh de recherche qui indique l'ensemble du dossier et de remplacer le modèle correspondant avec le motif donné pour chaque instance que vous voulez changer. Il se trouve chacun d'eux séparément et de modifier le fichier de la façon dont vous le souhaitez.

sed '/ Server \u003d 127.0.0.1 / (s / / Server \u003d 0.0.0.0 / g)
/ ServerPort \u003d 0 / (s / / ServerPort \u003d 1 / g)
/ Activer le serveur \u003d 1 / (s / / Activer le serveur \u003d 0 / g)
'/ Opt / server.conf> / opt / new_server.conf
  #5 (permalink)  
Old 05-26-2009
Registered User
 

Join Date: Mai 2009
Messages: 6
Citation:
Posté par BubbaJoe View Post
Votre IFS est mal réglé. L'IFS \u003d "" dit il n'y a pas de séparateur de sorte que le fichier est lu ensemble. Vous ne pouvez utiliser l'IFS est-il est en fait un séparateur entre chaque champ. Cat $ FILE Alors ne vous donnera pas ligne par ligne, il vous donnera tout le fichier comme un domaine à la fois. Ainsi, seulement 1 fois correspondants. Puisque vous voulez vraiment voir à chaque ligne un dossier, vous devez utiliser awk ou sed pour trouver et remplacer le texte.
grâce à l'aide ..

so what if i ensemble
IFS \u003d "\ n \ t"

Je suppose que, cat $ FILE fera ligne par ligne ..

ok! i will try it out .. temps, pourriez-vous vérifier mon solde de code .. et de dire si mon code est correct ou non.

merci
  #6 (permalink)  
Old 05-26-2009
devtakh devtakh is offline Forum Advisor  
Registered User
 

Join Date: Oct 2007
Lieu: Bangalore
Posts: 598
Citation:
Posté par lightdensity View Post
merci pour vos réponses .. En fait, je suis de nouveau à des scripts shell

Code:
FILE="/opt/server.conf"
NEW_FILE="/opt/new_server.conf"
        
 IFS=""
        for line in `cat ${FILE}`; do
        #echo ${line}
        if [ -n "`echo ${line} | grep 'Server=127.0.0.1'`" ]  #grep command searches for right string
        then
                 echo ${line} | sed 's|Server=127.0.0.1|Server=0.0.0.0|g' >>$NEW_FILE
        elif [ -n "`echo ${line} | grep 'ServerPort=0'`" ]
        then
                echo ${line} | sed 's|ServerPort=0|ServerPort=1|g' >>$NEW_FILE
        elif [ -n "`echo ${line} | grep 'Enable Server=1'`" ]
        then
                echo ${line} | sed 's|Enable Server=1|Enable Server=0|g' >>$NEW_FILE
        else
                echo ${line} >>$NEW_FILE
        fi
        done

Alors, comment savoir à qui le droit de chaîne?

merci
Il sera un gaspillage de ressources à utiliser le shell script lorsque sed peut la gérer. vous n'avez pas besoin de vérifier si le mot existe et si elle existe, alors le remplacer. sed peut le faire pour vous.
Mais en cas que vous avez à faire .. Je vous suggère d'utiliser tout en boucle, au lieu d'une boucle avec la commande cat.


Code:
FILE="/opt/server.conf"
NEW_FILE="/opt/new_server.conf"
        
       while read line
   do
        #echo ${line}
        if [ -n "`echo ${line} | grep 'Server=127.0.0.1'`" ]  #grep command searches for right string
        then
                 echo ${line} | sed 's|Server=127.0.0.1|Server=0.0.0.0|g' >>$NEW_FILE
        elif [ -n "`echo ${line} | grep 'ServerPort=0'`" ]
        then
                echo ${line} | sed 's|ServerPort=0|ServerPort=1|g' >>$NEW_FILE
        elif [ -n "`echo ${line} | grep 'Enable Server=1'`" ]
        then
                echo ${line} | sed 's|Enable Server=1|Enable Server=0|g' >>$NEW_FILE
        else
                echo ${line} >>$NEW_FILE
        fi
        done < $FILE

-Devaraj Takhellambam
  #7 (permalink)  
Old 05-27-2009
Registered User
 

Join Date: Sep 2006
Posts: 2604
si vous avez Python

Code:
#!/usr/bin/env python
import fileinput
d={ "Server":"0.0.0.0", "ServerPort":"1", "Enable Server":"0" }
for line in fileinput.FileInput("file",inplace=1):
    line=line.strip()
    if not line.startswith("#") and line!="":
        line=line.split("=")        
        print line[0]+"="+d[line[0]]
    else:
        print line

sortie

Code:
# ./test.py
# more file
### Welcome to server ###
### Server address and port ###

Server=0.0.0.0
### Replace Server=0.0.0.0 ###

ServerPort=1
### Replace ServerPort=1 ####
### Enable Server ##

Enable Server=0

### Replace Enable Server=0 ###
### END OF FILE ##

Liens Sponsorisés
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Hors tension


Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
Tableaux à la requête de trouver des utilisateurs pour la base de données à partir de scripts shell pinnacle De programmation et de script Shell 0 04-10-2009 06:18 PM
pour déterminer si la requête de mise à jour est réussie ou non en utilisant Ksh Script ali560045 De programmation et de script Shell 3 01-07-2009 01:41 AM
find-mtime requête Rajat UNIX pour les nuls Questions et réponses 1 07-09-2008 08:12 AM
question à propos de trouver et-exec shriashishpatil UNIX for Advanced & Expert Users 2 04-12-2007 02:16 AM
trouvez-perm requête napolayan UNIX pour les nuls Questions et réponses 1 11-28-2006 02:28 PM



Toutes les heures sont au format GMT -4. Le temps est maintenant 05:55 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX et Linux Forums Copyright © 1993-2010. Tous droits Reserved.Ad Gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0