2017-06-06 5 views
0

J'utilise Cmder sous Windows et tente d'exécuter l'instruction suivante:sed option -e inconnue `l - Pas un problème delimiter

echo "c:\Sources\" + (echo "Modules/ASR/branches/1.9" | sed -e "s|Modules/||") 

Chaque fois que je commande problème qui je reçois l'erreur ennuyeux

sed: -e expression #1, char 13: unknown option to `s' 

Mais quand je lance la commande sed lui-même:

(echo "Modules/ASR/branches/1.9" | sed -e "s|Modules/||") 

Il fonctionne comme par magie. Quelqu'un pourrait-il expliquer ce que je fais mal?

Note de l'éditeur: Cette question a été à l'origine mis-tagged , alors que le symptôme décrit implique .

+0

ressemble à ')' est votre modificateur .... Inventer une syntaxe inexistante pour votre commodité n'est pas la voie à suivre. –

+0

N'avez-vous pas besoin d'échapper des barres obliques inverses entre guillemets sur Cmder? Comme il regarde maintenant tous vos citations sont foiré. – 123

+0

@KarolyHorvath Je vais avoir besoin d'un peu plus de nudging dans la bonne direction. Par votre remarque, je comprends que je fais quelque chose de mal, mais je n'ai aucune idée de comment aller de l'avant. – WeyensL

Répondre

2

Le message d'erreur dans la question est due aux fenêtres cmd qui divise la commande avec le | et ajoute la fermeture Parenthese ) à commande sed.

cmd équivalent pour « substitution de commande » est for /f suivi par la commande entre guillemets simples, le tuyau doit être échappé avec ^

for /f %x in ('echo "Modules/ASR/branches/1.9" ^| sed -e "s|Modules/||" ') do @echo "c:\Sources\"%~x 

Ou quand il est utilisé dans le script le pour cent doit être doublé

for /f %%x in ('echo "Modules/ASR/branches/1.9" ^| sed -e "s|Modules/||" ') do @echo "c:\Sources\"%%~x 

Sinon l'expansion permet de remplacer le motif %var:pat=repl%

set mypath=Modules/ASR/branches/1.9 
echo "c:\Sources\"%mypath:Modules/=% 

en bash équivalent

echo 'c:\Sources\'"$(echo "Modules/ASR/branches/1.9" | sed -e "s|Modules/||")" 

aussi pour éviter de lancer un nouveau processus, cela peut être fait avec l'extension de variable # pour supprimer le préfixe le plus court.

mypath="Modules/ASR/branches/1.9" 
echo 'c:\Sources\'"${mypath//Modules\/}" 
+0

backticks support nesting ... – 123

+0

@ 123 voulez-vous dire 'echo \' echo \\ 'echo ok \\' \ '' –

+0

oui qui est imbriqué – 123