The UNIX and Linux Forums  


Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
Tabelle di ricerca per trovare gli utenti per il database da script di shell pinnacle Shell scripting e di programmazione 0 04-10-2009 06:18 PM
per trovare l'aggiornamento di query se è successo o che non utilizzano script ksh ali560045 Shell scripting e di programmazione 3 01-07-2009 01:41 AM
find-mtime query Rajat UNIX for Dummies Domande & Risposte 1 07-09-2008 08:12 AM
query di ricerca e su-exec shriashishpatil UNIX e avanzata per utenti esperti 2 04-12-2007 02:16 AM
trovare query-perm napolayan UNIX for Dummies Domande & Risposte 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 Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 05-26-2009
lightdensity lightdensity is offline
Utente Registrato
  
 

Iscriviti Data: maggio 2009
Interventi: 6
trovare e sostituire query

Ciao ppl,

Sto scrivendo uno script che trova più parole partita e sostituirlo con nuove parole.
Ho server.conf file che si presenta come

Codice:
### 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 ##

-------------------------------------------------- ---------
Ho scritto il codice per come illustrato di seguito

Codice:
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

Ma quando ho eseguito il mio script si sostituisce solo la prima partita (Server \u003d 0.0.0.0). Restanti due partite doesnt cambiamento.
Non so che cosa non va con il mio codice.

Can anyone help me su questo?
Grazie in anticipo

Ultimo a cura di lightdensity; al 05/26/2009 01:14 PM..
  #2 (permalink)  
Old 05-26-2009
devtakh devtakh is offline
Utente Registrato
  
 

Iscriviti Data: ottobre 2007
Località: Bangalore
Interventi: 514

Codice:
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
Utente Registrato
  
 

Iscriviti Data: maggio 2009
Interventi: 6
Citazione:
Originalmente inviato da devtakh View Post
Codice:
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
grazie per la risposta .. In realtà io sono nuovo di shell scripting

Codice:
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

Allora, come per scoprire che per la stringa di destra?

grazie
  #4 (permalink)  
Old 05-26-2009
BubbaJoe's Avatar
BubbaJoe BubbaJoe is offline
Utente Registrato
  
 

Iscriviti Data: ottobre 2008
Località: San Luigi
Interventi: 153
Il vostro IFS è sbagliato. IFS \u003d "", dice non c'è separatore in modo che il file viene letto tutto. È possibile utilizzare solo IFS è in realtà esiste una SEPERATOR tra ciascun campo. Cat $ FILE Quindi non vi daranno, linea per linea, vi darà mentre il file come un campo in una sola volta. Pertanto, solo 1 volta corrispondenti. Poiché si vuole veramente guardare ogni riga come un record che si deve usare awk o sed per trovare e sostituire il testo.

Quindi, questo lavoro per voi, che è stato inviato da devtakh dice che tutta la ricerca di file e sostituire l'abbinamento con il modello di esempio per ogni modello che si desidera modificare. Si troveranno ciascuno separatamente e modificare il file nel modo desiderato.

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

Iscriviti Data: maggio 2009
Interventi: 6
Citazione:
Originalmente inviato da BubbaJoe View Post
Il vostro IFS è sbagliato. IFS \u003d "", dice non c'è separatore in modo che il file viene letto tutto. È possibile utilizzare solo IFS è in realtà esiste una SEPERATOR tra ciascun campo. Cat $ FILE Quindi non vi daranno, linea per linea, vi darà mentre il file come un campo in una sola volta. Pertanto, solo 1 volta corrispondenti. Poiché si vuole veramente guardare ogni riga come un record che si deve usare awk o sed per trovare e sostituire il testo.
grazie per l'aiuto ..

se sì, quali i set
IFS \u003d "\ n \ t"

Immagino che, cat $ FILE darà riga per riga ..

ok! i cercherà it out .. nel frattempo si potrebbe verificare il mio codice restanti .. e dire se il mio codice è corretto o meno.

grazie
  #6 (permalink)  
Old 05-26-2009
devtakh devtakh is offline
Utente Registrato
  
 

Iscriviti Data: ottobre 2007
Località: Bangalore
Interventi: 514
Citazione:
Originalmente inviato da lightdensity View Post
grazie per la risposta .. In realtà io sono nuovo di shell scripting

Codice:
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

Allora, come per scoprire che per la stringa di destra?

grazie
Sarà uno spreco di risorse da utilizzare quando la shell script sed in grado di gestire. non hai bisogno di controllare se la parola esiste e se esiste, quindi sostituirla. sed che possiamo fare per voi.
Ma in caso avete bisogno di fare .. ti suggerisco di usare mentre loop, invece di un ciclo for con il comando cat.


Codice:
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
Utente Registrato
  
 

Iscriviti Data: maggio 2009
Interventi: 6
Citazione:
Originalmente inviato da devtakh View Post
Codice:
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,

La tua soluzione funziona bene ... ma io sono di fronte a nuove problema adesso ... In realtà non ho menzionato il mio completo file di input che è

Codice:
### 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 ##

Quindi quello che ho attuato simile

Codice:
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

File di output simile a

Codice:
Server=0.0.0.0
ServerPort=1
Enable Server=0

Così, quando i miei eseguire codice, file di output contiene solo le stringhe che ho cambiato, ci sono alcune sequenze che i desidera copiare come.

Mi dispiace molto fastidio che si ...

grazie
Closed Thread

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 09:19 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0