2017-01-13 2 views
1

Ich habe eine Datei, die mehrere Zeilen hat, die mit einem Schlüsselwort beginnt. Ich möchte nur einen von ihnen ändern und es ist einfach, die beiden zu unterscheiden. Ich möchte die, die unter der [dbinfo] Abschnitt ist. Der Domain Name ist statisch, also weiß ich, dass sich das nicht ändert.Mit awk nach einer Zeile suchen, die mit beginnt, aber auch eine Zeichenfolge enthält

awk -F '=' '$1 ~ /^dbhost/ {print $NF};' myfile.txt 

meinedatei.txt

[ual] 
path=/web/ 
dbhost=ez098sf 

[dbinfo] 
dbhost=ec0001.us-east-1.localdomain 
dbname=ez098sf_default 
dbpass=XXXXXX 
+1

ja, was ist die gewünschte Ausgabe? – NinjaGaiden

+0

Ich möchte schließlich den Wert für diesen Parameter ändern. Also, ich möchte nicht den 'dbhost' Wert unter' [ual] 'berühren, ich möchte den unter' [dbinfo] '. – luckytaxi

+0

Ihr Titel scheint nicht mit der Frage übereinzustimmen. Die Zeile enthält die Zeichenfolge nicht, sie befindet sich in einem Block, der mit einer anderen Zeichenfolge beginnt. – Barmar

Antwort

2

können Sie diesen awk Befehl für Anwesenheit von [dbinfo] zur ersten Überprüfung verwenden Abschnitt und dann ändern dbhost Parameter:

awk -v h='newhost' 'BEGIN{FS=OFS="="} 
     $0 == "[dbinfo]" {sec=1} sec && $1 == "dbhost"{$2 = h; sec=0} 1' file 

[ual] 
path=/web/ 
dbhost=ez098sf 

[dbinfo] 
dbhost=newhost 
dbname=ez098sf_default 
dbpass=XXXXXX 
1

Sie wollen hier ein wenig von einer Zustandsmaschine nutzen:

awk -F '=' ' 
    $0 ~ /^\[.*\]/ {in_db_info=($0=="[dbinfo]"} 
    $0 ~ /^dbhost/{if (in_db_info) print $2;}' myfile.txt 
1

Sie können es auch tun, mit sed:

sed '/\[dbinfo\]/,/\[/s/\(^dbhost=\).*/\1domain.com/' myfile.txt 
Verwandte Themen