The UNIX and Linux Forums  
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.

Go Back   UNIX och Linux Forum > Upp Forum > Shell-programmering och Skript
.
google unix.com



Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här.

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
Tabeller som sökfråga för att hitta användare för databasen från shell script Pinnacle Shell-programmering och Skript 0 04-10-2009 05:18
att hitta om uppdateringen sökfråga är framgångsrika eller inte använder ksh Script ali560045 Shell-programmering och Skript 3 01-07-2009 01:41
hitta-mtime query Rajat UNIX for Dummies Frågor & Svar 1 07-09-2008 07:12
förfrågan om att hitta och-exec shriashishpatil UNIX för avancerade & Expertanvändare 2 04-12-2007 01:16
hitta-perm query napolayan UNIX for Dummies Frågor & 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 denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 05-26-2009
lightdensity lightdensity is offline
Registered User
  
 

Join Date: maj 2009
Inlägg: 6
Sök och ersätt query

Hej ppl,

Jag skriver ett script som hittar flera ord matchen och ersätta det med nya ord.
Jag har server.conf fil som ser ut som
Kod:
### 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 ##
-------------------------------------------------- ---------
Jag har skrivit kod för det som visas nedan
Kod:
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 jag kör mitt script det bara ersätter den första matchen (Server \u003d 0.0.0.0). Resterande två matcher doesnt förändring.
Jag vet inte vad för fel med min kod.

Kan någon hjälpa mig med detta?
Tack på förhand

Senast redigerad av lightdensity; 05-26-2009 vid 12:14..
  #2 (permalänk)  
Old 05-26-2009
devtakh devtakh is offline
Registered User
  
 

Join Date: oktober 2007
Ort: Bangalore
Inlägg: 514
Kod:
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 (permalänk)  
Old 05-26-2009
lightdensity lightdensity is offline
Registered User
  
 

Join Date: maj 2009
Inlägg: 6
Citat:
Ursprungligen postat av devtakh View Post
Kod:
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
tack för ditt svar .. Egentligen är jag ny på shell scripting
Kod:
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å, hur man kan ta reda på vilka för rätten string?

tack
  #4 (permalänk)  
Old 05-26-2009
BubbaJoe's Avatar
BubbaJoe BubbaJoe is offline
Registered User
  
 

Join Date: oktober 2008
Ort: St Louis
Inlägg: 153
Din IFS är fel. The IFS \u003d "säger det inte finns någon separator så hela filen lästs. Du kan bara använda IFS är det faktiskt en SEPERATOR mellan varje fält. Så cat $ FILE kommer inte ge er linje för linje det ger dig samtidigt fil som ett område på en gång. Därför endast matchningsalternativ 1 temne. Eftersom du verkligen vill titta på varje rad som en post ska du använda awk eller sed att hitta och ersätta text.

Så detta kommer att fungera för dig som var postat av devtakh som säger söka i hela filen och ersätta den matchande mönster med ett visst mönster för varje instans du vill ändra. Det kommer att hitta var och en för sig och byta fil som du vill.

sed "/ Server \u003d 127.0.0.1 / (s / / Server \u003d 0.0.0.0 / g)
/ ServerPort \u003d 0 / (s / / ServerPort \u003d 1 / g)
/ Aktivera Server \u003d 1 / (s / / Aktivera Server \u003d 0 / g)
"/ Opt / server.conf> / opt / new_server.conf
  #5 (permalänk)  
Old 05-26-2009
lightdensity lightdensity is offline
Registered User
  
 

Join Date: maj 2009
Inlägg: 6
Citat:
Ursprungligen postat av BubbaJoe View Post
Din IFS är fel. The IFS \u003d "säger det inte finns någon separator så hela filen lästs. Du kan bara använda IFS är det faktiskt en SEPERATOR mellan varje fält. Så cat $ FILE kommer inte ge er linje för linje det ger dig samtidigt fil som ett område på en gång. Därför endast matchningsalternativ 1 temne. Eftersom du verkligen vill titta på varje rad som en post ska du använda awk eller sed att hitta och ersätta text.
tack för hjälp ..

så vad händer om jag
IFS \u003d "\ n \ t"

än jag, cat $ FILE ger rad för rad ..

ok! Jag ska prova det .. Under tiden kan du kolla mina återstående nummer .. och berätta om mina nummer är korrekt eller inte.

tack
  #6 (permalänk)  
Old 05-26-2009
devtakh devtakh is offline
Registered User
  
 

Join Date: oktober 2007
Ort: Bangalore
Inlägg: 514
Citat:
Ursprungligen postat av lightdensity View Post
tack för ditt svar .. Egentligen är jag ny på shell scripting
Kod:
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å, hur man kan ta reda på vilka för rätten string?

tack
Det kommer att bli ett slöseri med resurser att använda shell script när sed kan hantera det. du behöver inte kontrollera om ordet finns och om den existerar, och sedan ersätta det. sed kan göra det åt dig.
Men Incase du behöver göra .. Jag föreslår att du använder samtidigt loop i stället för en för slinga med katt kommando.

Kod:
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 (permalänk)  
Old 05-27-2009
lightdensity lightdensity is offline
Registered User
  
 

Join Date: maj 2009
Inlägg: 6
Citat:
Ursprungligen postat av devtakh View Post
Kod:
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
Hej Devaraj Takhellambam,

Din lösning fungerar bra ... men jag inför nya problem nu ... Faktiskt jag inte nämnt min fullständiga indatafilen som är
Kod:
### 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å vad jag har genomfört ser ut som
Kod:
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 utseende
Kod:
Server=0.0.0.0
ServerPort=1
Enable Server=0
Så när jag kör min kod, utdatafilen endast innehåller strängar som jag har förändrats, det finns vissa strängar som jag vill kopiera det.

Ursäkta jag stör er mycket ...

tack
Closed Thread

Komihåglista

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 07:41.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0