Frage

Ich möchte einen DOS-Dateinamen maskieren, damit ich ihn mit sed verwenden kann.Ich habe eine DOS-Batchdatei, etwa so:

set FILENAME=%~f1

sed 's/Some Pattern/%FILENAME%/' inputfile

(Notiz: %~f1 - erweitert sich %1 zu einem vollständig qualifizierten Pfadnamen - C:\utils\MyFile.txt)

Ich habe festgestellt, dass die Backslashes in %FILENAME% entkommen nur dem nächsten Buchstaben.

Wie kann ich sie verdoppeln, damit sie entkommen sind?

(Ich habe Cygwin installiert, also können Sie gerne auch andere *nix-Befehle verwenden)

Lösung

Kombinieren Sie die Vorschläge von Jeremy und Alexandru Nedelcu und verwenden | Für den Trennzeichen im SED -Befehl habe ich

set FILENAME=%~f1
cygpath "s|Some Pattern|%FILENAME%|" >sedcmd.tmp
sed -f sedcmd.tmp inputfile
del /q sedcmd.tmp
War es hilfreich?

Lösung

Das wird funktionieren.Es ist chaotisch, weil Sie in BAT-Dateien nicht set var=`cmd` verwenden können, wie Sie es unter Unix können.Die Tatsache, dass Echo Anführungszeichen nicht versteht, ist ebenfalls problematisch und könnte zu Problemen führen, wenn Some Pattern enthält Shell-Metazeichen.

set FILENAME=%~f1
echo s/Some Pattern/%FILENAME%/ | sed -e "s/\\/\\\\/g" >sedcmd.tmp
sed -f sedcmd.tmp inputfile
del /q sedcmd.tmp

[Bearbeitet]:Ich bin überrascht, dass es bei dir nicht funktioniert hat.Ich habe es gerade getestet und es hat auf meinem Computer funktioniert.Ich verwende sed von http://sourceforge.net/projects/unxutils und cmd.exe verwenden, um diese Befehle in einer Bat-Datei auszuführen.

Andere Tipps

Sie könnten es alternativ versuchen (über die Eingabeaufforderung) ...

> cygpath -m c:\some\path
c:/some/path

Wie Sie sich vorstellen können, werden Backslashes in Schrägstriche umgewandelt.

@Alexandru & Jeremy, Danke für eure Hilfe.Ihr bekommt beide Upvotes

@Jeremy

Mit Ihrer Methode habe ich die folgende Fehlermeldung erhalten:

sed:-e Ausdruck Nr. 1, Zeichen 8:nicht abgeschlossener „s“-Befehl

Wenn Sie Ihre Antwort so bearbeiten können, dass sie funktioniert, würde ich sie akzeptieren.(Das Einfügen meiner Lösung zählt nicht)

Aktualisieren: Ok, ich habe es mit UnixUtils versucht und es hat funktioniert.(Zur Referenz: Die UnixUtils, die ich heruntergeladen habe, waren vom 1. März 2007 und verwenden GNU sed Version 3.02, meine Cygwin-Installation hat GNU sed Version 4.1.5)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top