Domanda

Voglio sfuggire a un nome file DOS in modo da poterlo usare con sed.Ho un file batch DOS simile a questo:

set FILENAME=%~f1

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

(Nota: %~f1 - si espande %1 a un nome di percorso completo - C:\utils\MyFile.txt)

Ho scoperto che le barre rovesciate in %FILENAME% stanno semplicemente sfuggendo alla lettera successiva.

Come posso raddoppiarli in modo che vengano scappati?

(Ho installato Cygwin quindi sentiti libero di usare qualsiasi altro comando *nix)

Soluzione

Combinando i suggerimenti di Jeremy e Alexandru Nedelcu e usando | per il delimitatore nel comando sed che ho

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

Soluzione

Funzionerà.È complicato perché nei file BAT non puoi usare set var=`cmd` come puoi in Unix.Anche il fatto che echo non comprenda le virgolette è complicato e potrebbe causare problemi se Some Pattern contiene metacaratteri della shell.

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

[Modificato]:Sono sorpreso che non abbia funzionato per te.L'ho appena provato e ha funzionato sulla mia macchina.Sto usando sed from http://sourceforge.net/projects/unxutils e utilizzando cmd.exe per eseguire tali comandi in un file bat.

Altri suggerimenti

Potresti provare in alternativa (dal prompt dei comandi) ...

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

Come puoi immaginare, converte le barre rovesciate in barre.

@Alexandru e Jeremy, grazie per il vostro aiuto.Entrambi ottenete voti positivi

@Jeremy

Usando il tuo metodo ho ricevuto il seguente errore:

sed:-e espressione n. 1, carattere 8:comando "s" senza terminazione

Se puoi modificare la tua risposta per farla funzionare, la accetterei.(incollare la mia soluzione non conta)

Aggiornamento: Ok, l'ho provato con UnixUtils e ha funzionato.(Per riferimento, UnixUtils che ho scaricato era datato 1 marzo 2007 e utilizza GNU sed versione 3.02, la mia installazione Cygwin ha GNU sed versione 4.1.5)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top