Wie ersetzt man Zeichenketten mit Schrägstrichen mit sed?

Ich habe ein Visual Studio-Projekt, das lokal entwickelt wird. Die Codedateien müssen auf einem entfernten Server bereitgestellt werden. Das einzige Problem sind die URLs, die sie enthalten und die hart kodiert sind.

Das Projekt enthält URLS wie ?page=one . Damit der Link auf dem Server gültig ist, muss er /page/one lauten.

Ich habe beschlossen, alle URLS in meinen Codedateien vor der Bereitstellung mit sed zu ersetzen, aber ich komme mit den Schrägstrichen nicht weiter.

Ich weiß, dies ist eine nicht schöne Lösung, aber es ist einfach würde mir eine Menge Zeit sparen. Die Gesamtzahl der zu ersetzenden Zeichenketten beträgt weniger als 10. Die Gesamtzahl der Dateien, die überprüft werden müssen, ist ~30.

Ein Beispiel, das meine Situation beschreibt, finden Sie unten:

Befehl, den ich verwende:

sed -f replace.txt < a.txt > b.txt

replace.txt, die alle Zeichenketten enthält:

s/?page=one&/pageone/g
s/?page=two&/pagetwo/g
s/?page=three&/pagethree/g

a.txt:

?page=one&
?page=two&
?page=three&

Inhalt von b.txt, nachdem ich meinen sed-Befehl ausgeführt habe:

pageone
pagetwo
pagethree

Was b.txt enthalten soll:

/page/one
/page/two
/page/three
Lösung

Am einfachsten ist es, wenn Sie in Ihren Such-/Ersatzzeilen ein anderes Trennzeichen verwenden, z. B.:

s:?page=one&:pageone:g

Sie können jedes beliebige Zeichen als Begrenzungszeichen verwenden, das nicht Teil einer der beiden Zeichenketten ist. Oder Sie könnten es mit einem Backslash abtrennen:

s/\//foo/

Das würde / durch foo ersetzen. Sie sollten den Backslash verwenden, wenn Sie nicht wissen, welche Zeichen in den Ersetzungszeichenfolgen vorkommen könnten (z. B. wenn es sich um Shell-Variablen handelt).

Kommentare (8)

Der "s"-Befehl kann jedes beliebige Zeichen als Begrenzungszeichen verwenden; das Zeichen, das nach dem "s" kommt, wird verwendet. Ich wurde dazu erzogen, ein "#" zu verwenden. Etwa so:

s#?page=one&#/page/one#g
Kommentare (4)

\ vor Sonderzeichen hinzufügen:

s/\?page=one&/page\/one\//g

usw.

Kommentare (2)