Hintere Schrägstriche suchen und ersetzen, um Schrägstriche in Fenstern nach vorne zu verschieben

2720
dukeofgaming

In letzter Zeit musste ich neue, nicht protokollierte Dateien aus meinem Versionierungssystem löschen. In Linux verwende ich:

hg status -un|xargs rm 

Und es funktioniert gut, aber wenn es in Windows gemacht wird, hg statuslistet es Pfade mit Backslash auf, so dass Sachen schief gehen. Also versuche ich dann:

hg status -un|sed 's/\\/\//g' 

... aber ich erhalte die Fehlermeldung: sed: -e Ausdruck # 1, Zeichen 8: Unterbrochenes `s 'Kommando

Dann versuche ich etwas Ascii:

`hg status -un|sed 's/\o134/\o57/g'` 

... das bringt mich: sed: -e Ausdruck # 1, Char 14: Hinterer Schrägstrich

Und ein bisschen Scripting:

hg status -un|sed 's/`echo \`/`echo /`/g' 

... das bringt mich: sed: -e Ausdruck # 1, Char 19: unbekannte Option für `s '

Ich versuche das letzte Mal mit anderen Charakteren und bekomme die erwartete Ausgabe ... also bin ich völlig verloren. Ich habe natürlich Cygwin und möchte die Verwendung einer Datei vermeiden (das ist, was ich gemacht habe).

Danke im Voraus

3

2 Antworten auf die Frage

2
dukeofgaming

duke !, du machst es falsch !, du kannst :statt /für die Regex verwenden:

hg status -un|sed 's:\\:/:g'

* facepalm *

0
Mike

Um den "Trailing Backslash" -Fehler zu vermeiden, sollten Sie sicherstellen, dass Sie den letzten Backslash nicht entfernen. Dies kann erreicht werden, indem im regulären Ausdruck sichergestellt wird, dass dem ersetzten Zeichen immer ein anderes Nicht-Backslash-Zeichen folgt. der sed sollte so aussehen ...

sed "s:\\([^\]\+\):/\1:g"

.. was grob übersetzt wird als:

Suchen Sie einen Backslash, gefolgt von mindestens 1 Zeichen, das kein Backslash ist, und ersetzen Sie es mit einem Schrägstrich, gefolgt von den anderen übereinstimmenden Zeichen.

Beachten Sie, dass ich in meinem Regex (für Bash) nicht den Backslashes entkommen musste, aber ich musste den runden Klammern entkommen. Die '\ 1' ist eine Rückreferenz.

Hoffe das macht Sinn!