duke !, du machst es falsch !, du kannst :
statt /
für die Regex verwenden:
hg status -un|sed 's:\\:/:g'
* facepalm *
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 status
listet 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
duke !, du machst es falsch !, du kannst :
statt /
für die Regex verwenden:
hg status -un|sed 's:\\:/:g'
* facepalm *
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!