
Ich habe die Subversion-Konfigurationsdatei ( ~/.subversion/servers
)
Ich muss Änderungen vornehmen, um Proxy-Informationen hinzuzufügen (Host, Port, Ausnahmen). Diese Datei enthält viele Abschnitte mit Proxy-Informationen. Ich möchte nur ändern[global].
Ich habe hierfür bereits einen regulären Ausdruck erstellt, dieser funktioniert jedoch nicht.
/(\[global\].*[\n])((.*[\n])*)([\s\#]*http-proxy-port\s?=\s?.*)/gm
Sie können den Test online durchführen mithttps://regex101.com/und es funktioniert hervorragend durch:
\1\2http-proxy-port=9000
Ich habe es mit sed
der Ausführung der obigen Zeile versucht, aber es kommt kein Wort.
sed -i -r 's/(\[global].*[\n])((.*[\n])*)([\s\#]*http-proxy-port\s?=\s?.*)/\1\2http-proxy-port=9000/gm' \
~/.subversion/servers
Wie kann ich sed
den obigen regulären Ausdruck zum Laufen bringen?
Diese Beispieldatei von Subversion:
### The currently defined server options are:
### http-proxy-host Proxy host for HTTP connection
### http-proxy-port Port number of proxy host service
### http-proxy-username Username for auth to proxy service
### http-proxy-password Password for auth to proxy service
### http-proxy-exceptions List of sites that do not use proxy
### http-timeout Timeout for HTTP requests in seconds
[groups]
# group1 = *.collab.net
# othergroup = repository.blarggitywhoomph.com
# thirdgroup = *.example.com
### Information for the first group:
# [group1]
# http-proxy-host = proxy1.some-domain-name.com
# http-proxy-port = 80
# http-proxy-username = blah
# http-proxy-password = doubleblah
# http-timeout = 60
### Information for the second group:
# [othergroup]
# http-proxy-host = proxy2.some-domain-name.com
# http-proxy-port = 9000
### SSL certificate. See details above for overriding security
### due to SSL.
[global]
# http-proxy-exceptions = *.domain.org, *.domain.com
# http-proxy-host = proxy.domain.com
# http-proxy-port = 8080
# http-proxy-username = defaultusername
# http-proxy-password = defaultpassword
Die erwartete Leistung wird sein
...
[global]
http-proxy-exceptions = *.otherdomain.org, *.otherdomain.com, 127.0.0.1, localhost
http-proxy-host = proxy.otherdomain.com
http-proxy-port = 9000
# http-proxy-username = defaultusername
# http-proxy-password = defaultpassword
Antwort1
Wie vorgeschlagen,Es gibt bessere Möglichkeiten, INI-Dateien zu bearbeiten...
Trotzdem gibt es hier eine Möglichkeit mit sed
:
sed '/^\[.*\]/h
/http-proxy-exceptions/{x;/\[global\]/!{x;b;};x;c\
http-proxy-exceptions = *.otherdomain.org, *.otherdomain.com, 127.0.0.1, localhost
}
/http-proxy-host/{x;/\[global\]/!{x;b;};x;c\
http-proxy-host = proxy.otherdomain.com
}
/http-proxy-port/{x;/\[global\]/!{x;b;};x;c\
http-proxy-port = 9000
}' infile
Dies überschreibt den Hold-Puffer mit dem Inhalt des Musterbereichs jedes Mal, wenn es auf eine übereinstimmende Zeile stößt [.*]
(d. h. es speichert jeden Abschnittsnamen im h
alten Puffer). Bei jeder Zeile, die mit Ihren http-.*
Mustern übereinstimmt, wechselt es x
den Puffer - wenn der Hold-Bereichnicht( !
) übereinstimmt, [global]
dann wechselt es x
zurück und springt über zum nächsten Zyklus b
. Wenn der Haltebereich übereinstimmt, wechselt [global]
es x
zurück und c
ändert den Inhalt des Musterbereichs.