The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
Tabeller til at søge at finde brugere til databasen fra shell script Pinnacle Shell Programmering og Scripting 0 04-10-2009 06:18 PM
at finde, om opdatere forespørgslen er vellykket eller ikke bruger ksh Script ali560045 Shell Programmering og Scripting 3 01-07-2009 01:41 AM
find-mtime query Rajat UNIX for dummyer Spørgsmål & svar 1 07-09-2008 08:12 AM
forespørgsel om at finde og-exec shriashishpatil UNIX for Advanced & Ekspertsøgning Brugere 2 04-12-2007 02:16 AM
find-Perm query napolayan UNIX for dummyer Spørgsmål & svar 1 11-28-2006 02:28 PM

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øg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 05-26-2009
lightdensity lightdensity is offline
Registreret Bruger
  
 

Join Date: May 2009
Stillinger: 6
finde og erstatte forespørgsel

Hello ppl,

Jeg skriver et script, der finder flere ord match og erstatte det med nye ord.
Jeg har server.conf fil, der ser ud 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 koden til 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 køre mit script det kun erstatter den første kamp (Server \u003d 0.0.0.0). Resterende to kampe doesnt forandring.
Jeg ved ikke, hvad der galt med min kode.

Kan nogen hjælpe mig på dette?
Thanks in advance

Sidst redigeret af lightdensity; 05-26-2009 på 01:14 PM..
  #2 (permalink)  
Old 05-26-2009
devtakh devtakh is offline
Registreret Bruger
  
 

Join Date: oktober 2007
Beliggenhed: Bangalore
Posts: 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
Registreret Bruger
  
 

Join Date: May 2009
Stillinger: 6
Citat:
Oprindeligt Indsendt af 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
Tak for dit svar .. Actually Jeg er 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
Altså, hvordan man finder ud af, hvilke for retten strengen??

tak
  #4 (permalink)  
Old 05-26-2009
BubbaJoe's Avatar
BubbaJoe BubbaJoe is offline
Registreret Bruger
  
 

Join Date: oktober 2008
Beliggenhed: St Louis
Stillinger: 153
Din IFS er indstillet forkert. Den IFS \u003d "", siger der ikke er nogen separator så hele filen er læst. Du kan kun bruge IFS er der faktisk en SEPERATOR mellem hvert felt. Så cat $ FILE vil ikke give dig linje for linje, vil det give dig mens fil som et område på én gang. Derfor kan kun matcher 1 gang. Da du virkelig vil se på hver linje som en rekord du skal bruge awk eller sed at finde og erstatte teksten.

Så det vil arbejde for dig, som blev indsendt af devtakh som siger søge på hele filen og erstatter den matchende mønster med den givne mønster for hvert enkelt tilfælde, du vil ændre. Det vil finde hver enkelt separat og ændre filen den måde 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
Registreret Bruger
  
 

Join Date: May 2009
Stillinger: 6
Citat:
Oprindeligt Indsendt af BubbaJoe View Post
Din IFS er indstillet forkert. Den IFS \u003d "", siger der ikke er nogen separator så hele filen er læst. Du kan kun bruge IFS er der faktisk en SEPERATOR mellem hvert felt. Så cat $ FILE vil ikke give dig linje for linje, vil det give dig mens fil som et område på én gang. Derfor kan kun matcher 1 gang. Da du virkelig vil se på hver linje som en rekord du skal bruge awk eller sed at finde og erstatte teksten.
tak for hjælp ..

så hvad nu hvis jeg indstille
IFS \u003d "\ n \ t"

end jeg gætte, cat $ FILE vil give linje for linje ..

ok! Jeg vil prøve det .. I mellemtiden kan du tjekke min resterende kode .. og fortælle om min kode er korrekt eller ej.

tak
  #6 (permalink)  
Old 05-26-2009
devtakh devtakh is offline
Registreret Bruger
  
 

Join Date: oktober 2007
Beliggenhed: Bangalore
Posts: 514
Citat:
Oprindeligt Indsendt af lightdensity View Post
Tak for dit svar .. Actually Jeg er 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
Altså, hvordan man finder ud af, hvilke for retten strengen??

tak
Det vil være spild af ressourcer at bruge shell script, når sed kan håndtere det. du behøver ikke at kontrollere, om ordet findes, og hvis den findes, og derefter erstatte den. sed kan gøre det for dig.
Men incase du skal gøre .. Jeg foreslår, du bruger, mens løkke, i stedet for et for loop med katten kommando.

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
Registreret Bruger
  
 

Join Date: May 2009
Stillinger: 6
Citat:
Oprindeligt Indsendt af 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,

Din løsning værker bøde ... men jeg vender nyt problem nu ... Faktisk er jeg ikke har nævnt mit komplette inddatafil 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å hvad jeg har gennemført 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
Outputfil udseende
Code:
Server=0.0.0.0
ServerPort=1
Enable Server=0
Så når jeg udfører min kode, outputfil kun indeholder strengene som jeg har ændret sig, er der visse strenge, som jeg ønsker at kopiere, da det.

Undskyld jeg generer dig meget ...

tak
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 07:39 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0