The UNIX and Linux Forums  

Go Back   Die UNIX-und Linux-Foren > Top Foren > Shell Programmierung und Scripting
.
Google unix.com



Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
Tabellen, Abfragen, um Benutzer für die Datenbank aus der Shell-Skript Pinnacle Shell Programmierung und Scripting 0 04-10-2009 06:18 PM
zu finden, ob Aktualisierungsabfrage erfolgreich ist oder nicht mit Ksh Script ali560045 Shell Programmierung und Scripting 3 01-07-2009 01:41 AM
find-mtime-Abfrage Rajat UNIX for Dummies Questions & Answers 1 07-09-2008 08:12 AM
Fragen zu finden und zu-exec shriashishpatil UNIX für Fortgeschrittene und Experten 2 04-12-2007 02:16 AM
find-perm-Abfrage napolayan UNIX for Dummies Questions & Answers 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 Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 05-26-2009
lightdensity lightdensity is offline
Registrierte Nutzer
  
 

Registriert seit: Mai 2009
Beiträge: 6
Suchen und Ersetzen-Abfrage

Hallo ppl,

Ich schreibe ein Skript, das feststellt, mehrere Wörter mit und ersetzen sie durch neue Wörter.
Ich habe server.conf-Datei, die aussieht wie
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 ##
-------------------------------------------------- ---------
Ich habe für sie, wie unten gezeigt
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
Aber wenn ich mein Skript nur tritt an die Stelle des ersten Spiels (Server \u003d 0.0.0.0). Die verbleibenden zwei Spiele doesnt ändern.
Ich weiß nicht, was falsch mit meinem Code.

Kann jemand mir helfen, zu dieser Frage?
Vielen Dank im Voraus

Zuletzt bearbeitet von lightdensity; am 05-26-2009 01:14 PM..
  #2 (permalink)  
Old 05-26-2009
devtakh devtakh is offline
Registrierte Nutzer
  
 

Join Date: Oct 2007
Ort: Bangalore
Beiträge: 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
Registrierte Nutzer
  
 

Registriert seit: Mai 2009
Beiträge: 6
Zitat:
Zitat von 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
Vielen Dank für Ihre Antwort .. Eigentlich bin ich zu neuen 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
So, wie Sie herausfinden, welche für die richtige Zeichenfolge?

Danke
  #4 (permalink)  
Old 05-26-2009
BubbaJoe's Avatar
BubbaJoe BubbaJoe is offline
Registrierte Nutzer
  
 

Join Date: Oct 2008
Ort: St. Louis
Beiträge: 153
Ihr IFS ist falsch. Das IFS \u003d "", sagt es gibt keine Trennlinie, so dass die gesamte Datei gelesen wird. Sie können nur IFS ist es eigentlich ein seperator zwischen den einzelnen Bereichen. So cat $ Datei wird nicht geben Ihnen Zeile für Zeile wird Ihnen während der Datei als ein Feld auf einmal. Daher nur 1-mal passender. Da Sie wirklich wollen, auf der jede Zeile als Datensatz sollten Sie awk oder sed zu finden und ersetzen den Text.

So wird die Arbeit für Sie wurde von devtakh in dem es heißt, die gesamte Datei und ersetzen Sie die passenden Muster mit dem vorgegebenen Muster für jede Instanz die Sie ändern wollen. Es wird einzeln, und ändern Sie die Datei so, wie Sie wollen.

sed "/ Server \u003d 127.0.0.1 / (s / / Server \u003d 0.0.0.0 / g)
/ ServerPort \u003d 0 / (s / / ServerPort \u003d 1 / g)
/ Aktivieren 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
Registrierte Nutzer
  
 

Registriert seit: Mai 2009
Beiträge: 6
Zitat:
Zitat von BubbaJoe View Post
Ihr IFS ist falsch. Das IFS \u003d "", sagt es gibt keine Trennlinie, so dass die gesamte Datei gelesen wird. Sie können nur IFS ist es eigentlich ein seperator zwischen den einzelnen Bereichen. So cat $ Datei wird nicht geben Ihnen Zeile für Zeile wird Ihnen während der Datei als ein Feld auf einmal. Daher nur 1-mal passender. Da Sie wirklich wollen, auf der jede Zeile als Datensatz sollten Sie awk oder sed zu finden und ersetzen den Text.
Vielen Dank für Hilfe ..

so was ist, wenn ich
IFS \u003d "\ n \ t"

als ich denke, cat $ FILE wird Zeile für Zeile ..

ok! Ich werde probieren Sie es aus .. Inzwischen können Sie meine restlichen Code .. und sagen, ob mein Code richtig ist oder nicht.

Danke
  #6 (permalink)  
Old 05-26-2009
devtakh devtakh is offline
Registrierte Nutzer
  
 

Join Date: Oct 2007
Ort: Bangalore
Beiträge: 514
Zitat:
Zitat von lightdensity View Post
Vielen Dank für Ihre Antwort .. Eigentlich bin ich zu neuen 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
So, wie Sie herausfinden, welche für die richtige Zeichenfolge?

Danke
Es ist eine Verschwendung von Ressourcen, die Shell-Skript, wenn sed damit umgehen kann. Sie brauchen nicht zu prüfen, ob das Wort existiert und wenn es sie gibt, dann ersetzen. sed kann das für Sie.
Aber Sie müssen den Fall zu tun .. Ich schlage vor, Sie while-Schleife, statt einer for-Schleife mit dem Befehl 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
lightdensity lightdensity is offline
Registrierte Nutzer
  
 

Registriert seit: Mai 2009
Beiträge: 6
Zitat:
Zitat von 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,

Ihre Lösung funktioniert gut ... aber ich bin mit neuen Problem jetzt ... Eigentlich habe ich nicht meine komplette Eingabedatei die
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 ##
Also, was ich haben wie
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
Ausgabe-Datei sieht aus wie
Code:
Server=0.0.0.0
ServerPort=1
Enable Server=0
Also, wenn ich meinen Code ausführen, Output-Datei enthält nur die Saiten, die ich geändert haben, gibt es bestimmte Zeichenfolgen, die ich kopieren wollen, da sie.

Leider bin ich viel stört Sie ...

Danke
Closed Thread

Lesezeichen

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 02:00 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0