The UNIX and Linux Forums  
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.

Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
Tabeller for å søke å finne brukere for databasen fra shell script Pinnacle Shell programmering og Skripting 0 04-10-2009 05:18
å finne om oppdateringen søket er vellykket eller ikke bruker ksh Script ali560045 Shell programmering og Skripting 3 01-07-2009 01:41
finn-mtime søket Rajat UNIX for Dummies Spørsmål og svar 1 07-09-2008 07:12
forespørsel om å finne og-exec shriashishpatil UNIX for Advanced & ekspertbrukere 2 04-12-2007 01:16
finn-Perm søket napolayan UNIX for Dummies Spørsmål og svar 1 11-28-2006 02:28

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Søk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 05-26-2009
lightdensity lightdensity is offline
Registrert bruker
  
 

Bli Dato: mai 2009
Innlegg: 6
finne og erstatte søkeparametere

Hei ppl,

Jeg skriver et skript som finner flere ord match og erstatte dem med nye ord.
Jeg har server.conf fil som ser ut som
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 ##
-------------------------------------------------- ---------
Jeg har skrevet for det som vist nedenfor
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
Men når jeg kjører mitt script den bare erstatter første kamp (Server \u003d 0.0.0.0). Resterende to kamper doesnt endre.
Jeg vet ikke hva galt med min kode.

Kan noen hjelpe meg på dette?
Takk på forhånd

Sist endret av lightdensity; 05-26-2009 på 12:14..
  #2 (permalink)  
Old 05-26-2009
devtakh devtakh is offline
Registrert bruker
  
 

Bli Dato: Oct 2007
Beliggenhet: Bangalore
Innlegg: 514
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
lightdensity lightdensity is offline
Registrert bruker
  
 

Bli Dato: mai 2009
Innlegg: 6
Sitat:
Originally Posted by 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
takk for svar .. Egentlig er jeg ny på shell scripting
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
Så, hvordan finne ut hvilke for høyre streng?

takk
  #4 (permalink)  
Old 05-26-2009
BubbaJoe's Avatar
BubbaJoe BubbaJoe is offline
Registrert bruker
  
 

Bli Dato: Oct 2008
Sted: St Louis
Innlegg: 153
Ditt IFS er satt feil. The IFS \u003d "sier det ikke er skilletegnet så hele filen er lest. Du kan bare bruke IFS er det faktisk en SEPERATOR mellom hvert felt. Så cat $ FILE gir deg ikke linje for linje, vil den gi deg mens filen som et felt samtidig. Derav bare passer 1 time. Siden du virkelig vil se på hver linje som en posten bør du bruke awk eller sed å finne og erstatte tekst.

Så dette vil fungere for deg som var postet av devtakh som sier søk hele filen og erstatte samsvarende mønster med den gitte mønster for hver forekomst du vil endre. Det finner hver for seg og endre filen slik du ønsker.

sed '/ Server \u003d 127.0.0.1 / (s / / Server \u003d 0.0.0.0 / g)
/ ServerPort \u003d 0 / (s / / ServerPort \u003d 1 / g)
/ Enable Server \u003d 1 / (s / / Enable Server \u003d 0 / g)
'/ Opt / server.conf> / opt / new_server.conf
  #5 (permalink)  
Old 05-26-2009
lightdensity lightdensity is offline
Registrert bruker
  
 

Bli Dato: mai 2009
Innlegg: 6
Sitat:
Originally Posted by BubbaJoe View Post
Ditt IFS er satt feil. The IFS \u003d "sier det ikke er skilletegnet så hele filen er lest. Du kan bare bruke IFS er det faktisk en SEPERATOR mellom hvert felt. Så cat $ FILE gir deg ikke linje for linje, vil den gi deg mens filen som et felt samtidig. Derav bare passer 1 time. Siden du virkelig vil se på hver linje som en posten bør du bruke awk eller sed å finne og erstatte tekst.
takk for hjelp ..

Så hva om jeg satt
IFS \u003d "\ n \ t"

enn jeg gjette, cat $ FILE gir linje for linje ..

ok! Jeg skal prøve det .. I mellomtiden kan du sjekke gjenværende koden .. og fortelle om min koden er riktig eller ikke.

takk
  #6 (permalink)  
Old 05-26-2009
devtakh devtakh is offline
Registrert bruker
  
 

Bli Dato: Oct 2007
Beliggenhet: Bangalore
Innlegg: 514
Sitat:
Originally Posted by lightdensity View Post
takk for svar .. Egentlig er jeg ny på shell scripting
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
Så, hvordan finne ut hvilke for høyre streng?

takk
Det vil være en sløsing med ressurser til å bruke shell script når sed kan håndtere den. trenger du ikke å kontrollere om ordet finnes, og hvis den finnes, og erstatte det. sed kan gjøre det for deg.
Men incase du trenger å gjøre .. Jeg foreslår at du bruker mens løkke, i stedet for en for loop med cat kommandoen.

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
lightdensity lightdensity is offline
Registrert bruker
  
 

Bli Dato: mai 2009
Innlegg: 6
Sitat:
Originally Posted by 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
Hi Devaraj Takhellambam,

Løsningen fungerer fint ... men jeg vender nytt problem nå ... Egentlig jeg ikke nevnt mine fullføre inndatafil som er
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 ###
 
Enable Agent=1
Enable ip=1
 
### Now I dont need to change above two options ###
### END OF FILE ##
Så det jeg har implementert ligne
Code:
FILE="/opt/server.conf"
NEW_FILE="/opt/new_server.conf"
    exec 0<$FILE
    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
Utdatafilen ligner
Code:
Server=0.0.0.0
ServerPort=1
Enable Server=0
Så når jeg kjøre min kode, utdatafilen bare inneholder strenger som jeg har forandret seg, det er visse strenger som jeg vil kopiere som det.

Beklager jeg plager deg mye ...

takk
Closed Thread

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 02:57.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0