Wie ersetze ich einen Pfad mit einem anderen Pfad in sed?
Habe ich ein csh-Skript (kann ich zwar die Sprache ändern, wenn es keine Relevanz), wo ich Sie zu:
sed s/AAA/BBB/ file
Das problem ist, dass AAA und BBB sind die Pfade, und so enthält '/'. AAA fixiert ist, so kann ich sagen:
sed s/\\\/A\\\/A\\\A/BBB/ file
Jedoch, BBB basiert auf Variablen, einschließlich $PWD. Wie kann ich escape '/' in $PWD?
ODER gibt es eine andere Möglichkeit, die ich dies tun sollte vollständig?
InformationsquelleAutor der Frage Brian Postow | 2012-08-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
sed
können beliebige Trennzeichen statt/
ims
Befehl. Verwenden Sie einfach etwas, das nicht mehr begegnet, Ihre Wege:und so weiter.
Alternativ (und wenn Sie nicht wollen, zu erraten), Sie können pre-Prozess Ihren Weg mit der sed zu entkommen, die Schrägstriche:
und dann tun Sie, was Sie brauchen, mit
$pwdesc
.InformationsquelleAutor der Antwort Lev Levitsky
In Fällen, in denen der Ersatz-string oder pattern-string enthalten Schrägstriche, können Sie Gebrauch machen von der Tatsache, dass GNU sed kann ein alternativer Trennzeichen für die substitute-Befehl. Gemeinsame Entscheidungen für die Trennzeichen sind das pipe-Zeichen | oder den hash # - die beste Auswahl von Trennzeichen wird, hängt oft von der Art der zu verarbeitenden Datei. In Ihrem Fall können Sie versuchen
Hinweis: Die g nach dem letzten # - ändern Sie alle vorkommen in der Datei, wenn Sie möchten, ändern Sie zuerst ouccurence nicht verwenden g
InformationsquelleAutor der Antwort c0m3t
Mit
csh
für ernsthafte scripting ist in der Regel nicht zu empfehlen. Allerdings ist tangential zu der Frage auf der hand.Sind Sie wahrscheinlich nach etwas wie:
wo ist die shell-variable
$oldpath
enthält den Wert ersetzt werden, und$newpath
enthält der Ersatz, und es ist davon auszugehen, dass weder die variable enthält ein Gleichheitszeichen. Das heißt, Sie dürfen wählen Sie das Trennzeichen auf Muster, und die Vermeidung der üblichen/
Trennzeichen vermeidet Probleme mit der Schrägstriche in Pfadnamen. Wenn Sie denken, dass=
eventuell auch in Ihrem Dateinamen, wählen Sie etwas weniger wahrscheinlich erscheinen, wie Ctrl-A oder Ctrl-G.InformationsquelleAutor der Antwort Jonathan Leffler
InformationsquelleAutor der Antwort pylover
Können Sie Klammern expansion
${i/p/r}
zu entkommen, die Schrägstriche.In diesem Fall
${i//p/r}
für die Flucht alle vorkommen.Oder, präziser, in einer Linie
sed s/${p1//\//\\/}/${p2//\//\\/}/file
Den beiden Faust Schrägstriche
//
sind, einen separator, in Klammern Erweiterung, zu sagen, wir sind matching, in dem alle vorkommen, dann\/
ist für die Flucht der Schrägstrich in die Suche eine Vorlage, die/
als einen zweiten separator in der expansion, und dann\\/
ist der Austausch, die Hexe der backslash muss escaped werden.InformationsquelleAutor der Antwort FrViPofm