2016-09-29 1 views
0

Ich habe eine Datei, die Lines- die unten hatEs konnte keine Linie ersetzen Verwendung sed

[arakoon_scaler_thresholds] 
checker_loop_time = 3600 

Ich möchte die über 2 Zeilen mit der folgenden Zeile ersetzen -

[arakoon_scaler_thresholds] 
checker_loop_time = 60 

ich verwende Der folgende Befehl, aber Änderungen finden nicht statt.

sed -i "s/arakoon_scaler_thresholds\nchecker_loop_time = 3600/arakoon_scaler_thresholds\nchecker_loop_time = 60/g" file.ini 

Hinweis Es gibt mehrere Parameter mit dem Namen checker_loop_time, ich nur, dass checker_loop_time ändern möchten, die unter dem Abschnitt ist dies [arakoon_scaler_thresholds]

+1

Out of the box gespeichert wird, können 'sed' untersucht nur eine einzige Zeile zu einem Zeitpunkt, . Abgesehen davon sucht Ihr Suchausdruck nach dem Schlüsselwort neben einer neuen Zeile, während in Ihrem Beispiel eine rechte eckige Klammer folgt. – tripleee

Antwort

1

Versuchen und sobald es in Ordnung ist, verwenden Sie die -i Option für Inplace Editing

$ cat ip.txt 
checker_loop_time = 5463 

[arakoon_scaler_thresholds] 
checker_loop_time = 3600 
checker_loop_time = 766 

$ sed -E '/arakoon_scaler_thresholds/{N;s/(checker_loop_time\s*=\s*)3600/\160/}' ip.txt 
checker_loop_time = 5463 

[arakoon_scaler_thresholds] 
checker_loop_time = 60 
checker_loop_time = 766 

Das für arakoon_scaler_thresholds sucht, wird dann nächste Zeile mit N und t Henne führt die erforderlichen Suchen und Ersetzen

Sie auch awk

$ awk 'p ~ /arakoon_scaler_thresholds/{sub("checker_loop_time = 3600","checker_loop_time = 60")} {p=$0}1' ip.txt 
checker_loop_time = 5463 

[arakoon_scaler_thresholds] 
checker_loop_time = 60 
checker_loop_time = 766 

wo vorherige Zeile in einer Variablen

+0

Vielen Dank Sundeep, ich habe den folgenden Befehl verwendet: sudo sed -E -i '/ arakoon_scaler_thresholds/{N; s/(checker_loop_time \ s * = \ s *) 3600/checker_loop_time = 60 /}' –