mit sed:
sed -e '/#/!s/\(A_place[[:space:]]*=[[:space:]]*\)\(.*\)/\1"new_value"/' input
Zusammenbruch von dem, was hier getan wird:
l überspringen
ines das sind Kommentare:
/# /!
Dann kommt die Substitution in Form
s/alt/neu/
die alten auswählen, und legen Sie die Original-Zeichenkette innerhalb Pars (Rückreferenzierung), so dass es später zurückgehalten werden kann durch Spezifizieren \ 1. Dies entspricht der Zeichenkette "A_place", gefolgt von null oder mehr Leerzeichen Zeichen, gefolgt von dem Gleichheitszeichen gefolgt von Null mehr mehr Leerzeichen Zeichen. Beachten Sie, dass der zu ersetzende Wert ebenfalls in Parens liegt und mit \ 2; Es wird hier nicht benötigt und die Parens können weggelassen werden. So ist die alte Zeichenfolge übereinstimmen ist:
( A_place [[: space:]] * = [[: space:]] * ) (. *)
Dann wird die neue Zeile Ausgang wird mit dem Backref "\ 1" erstellt, wobei der Leerraum um das Gleichheitszeichen erhalten bleibt und der "neue Wert" angefügt wird, hier zur besseren Anschaulichkeit in Anführungszeichen, die in der neuen Zeile zwar Literal sind, aber in der endgültigen Ausgabe wahrscheinlich nicht erwünscht sind.„\ 1“ hier ist alles, was in den ersten paren begrenzt regex abgestimmt wurde, einschließlich Leerzeichen um das Gleichheitszeichen:
\ 1 „new_value“
Warum Sie C Tag haben? Bitte posten Sie die 'sed' Befehle, die Sie ausprobiert haben. Veröffentlichen Sie auch das Ergebnis, das Sie erhalten haben und was Sie wollten. – kabanus
Angesichts der fehlenden Genauigkeit in der Frage wäre eine sinnvolle Antwort "Verwenden Sie den richtigen sed-Befehl". –
Bitte fügen Sie Ihre gewünschte Ausgabe für diese Beispieleingabe zu Ihrer Frage hinzu. – Cyrus