2016-12-01 1 views
1

Ich habe einen Dateiaufruf config.txt, die so etwas enthält.Ersetzen Sie die Zeilen, wenn ein Teil der Zeichenfolge mit Shell-Skript übereinstimmt

[MS-SQL] 
DRIVER : FreeTDS 
SERVER : 138.23.21.45 

Was ich tun muß, ist, unabhängig von den String-Werte, die nach SERVER : enthalten muss mit einem Gehalt in einer Shell-Variablen wie $SERVER_IP ersetzt werden.

Endgültige config.ini müssen so sein. (man denke Bash-Shell-Variable bestehen einige dieser wie $SERVER_IP=192.168.5.3)

[MS-SQL] 
DRIVER : FreeTDS 
SERVER : 192.168.5.3 
+2

Mögliche Duplikate von [Wie verwende ich sed, um meine Konfigurationsdateien mit flexiblen Schlüsseln und Werten zu ändern?] (Http://stackoverflow.com/questions/5955548/how-do-i-use-sed -zum-ändern-meiner-konfigurationsdateien-mit-flexiblen-keys-and-values) – nu11p01n73R

+0

Ich bin neu bei sed sowie für das Shell-Scripting. Es wird besser sein, wenn du mir den Weg (Syntax) erklärst. – Daz

+1

Bitte überprüfen Sie den doppelten Link, den ich gepostet habe. Es hat ein sehr gutes Beispiel dafür, wie Sie es tun können. Wenn Sie dabei auf Probleme stoßen, fügen Sie sie der Frage hinzu. Jeder wird glücklich sein, Ihnen zu helfen, sobald Sie etwas müde sind. – nu11p01n73R

Antwort

1

Dies wird die Zeile:

sed -iE 's/(SERVER :)([0-9.]+)/\1'"$SERVER_IP"'/' config.txt 

Beschreibung:

-i     # write changes to the file "in place". 
-E     # Use extended regex (to avoid the need 
         # of backslash in `()`) 
's/ …/… /'   # Use the substitute command. 
(SERVER :)   # Match the string you need `SERVER : ` capturing it 
         # in the first group of parenthesis. 
([0-9.]+)    # capture digits and dots in the second group. 
/\1'"$SERVER_IP"'/' # write the contents of the first group and 
         # the value of the variable to the file. 
config.txt   # name of the file. 

Sie können auch den Wert ändern nach DRIVER, wenn Sie möchten:

sed -iE 's/(DRIVER :)(.*)/\1ODBC/' config.txt 
+0

Verwenden Sie 'sed -i -E ...' ('-i' für die Bearbeitung an Ort und Stelle). Sie können '-i.bak' hinzufügen, um eine' test.config.bak' des Originals für Sie zu erstellen. Es besteht auch keine Notwendigkeit für das Single-Quote/Double-Quote-Schema. Zitieren Sie einfach den gesamten Ausdruck, z. 'sed -i -E" ... "', was eine variable Substitution im Ersatzausdruck ermöglicht. –

+0

wird auf die Konsole gedruckt. aber nichts in der Datei config.txt geändert – Daz

+0

Sie sind sicher, dass Sie die '-i' Option verwendet? –

Verwandte Themen