Wie verwende ich sed, um alles andere außer dem Muster durch eine andere Zeichenfolge zu ersetzen?

Wie verwende ich sed, um alles andere außer dem Muster durch eine andere Zeichenfolge zu ersetzen?

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 \2als 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"

verwandte Informationen