
Ich muss sed verwenden, um alles zu ersetzen, bevor das Muster mit einer anderen Zeichenfolge in einer Datei abgeglichen wird
Meine Datei enthält verschiedene Pfade. Die letzten Komponenten dieser Pfade sind unabhängig vom Benutzer gleich, die ersten Komponenten ändern sich jedoch.
Zum Beispiel FürBenutzer 1, die Datei enthält den folgenden Pfad
build:
- "/Users/user1/Projects/Stash/sdk/license.txt"
FürBenutzer 2, der Pfad könnte
build:
- "/Users/user2/Documents/Work/sdk/license.txt"
Die letzten beiden Komponenten sind also "/sdk/lizenz.txt" sind für jeden Benutzer gleich.
Ich möchte alles vor diesen Komponenten durch den vom Benutzer angegebenen Pfad ersetzen, da dieser für diesen Benutzer spezifisch ist. Wie verwende ich sed, um diese Art der Ersetzung durchzuführen? Ich verwende hierfür ein Perl-Skript.
Antwort1
Sie können einfach Rückverweise verwenden
sed -e 's/\(^[ ]*\- "\)\(.*\)\(\/sdk\/license\.txt"$\)/\1path_with_which_to_be_replaced\3/'
Hier
\(....\)
wird verwendet, um Übereinstimmungen zu gruppieren und für die zukünftige Verwendung zu speichern; zur Verwendung als Ersetzung können Sie sie \1
\2
als Variablennamen verwenden.
In Ihrer Anforderung unterteile ich die Linie also in drei Gruppen
\(^[ ]*\- "\)
fürspace - "
\(.*\)
für zu ersetzende Teile, zB/Users/user2/Documents/Work
\(\/sdk\/license\.txt"$\)
für das gleiche Teil, d. h.sdk/license.txt"