sed заменить прямую косую черту на обратную косую черту

Мне нужно преобразовать имена файлов с косой чертой в имена файлов с обратной косой чертой в make-файле с помощью mingw32. Я использовал следующую команду sed для сохранения результата в переменной:

ORIGINAL=./a/b/main1.c ./a/b/main2.c ./a/b/main3.c

команда sed:

RESULT=$(shell echo $(ORIGINAL) | sed 's/\//\\/g')

И результат такой:

.\a\b\main1.c .abmain2.c .abmain3.c

Он отлично работает, если я запускаю его непосредственно на bash. Кто-нибудь может сказать мне, что случилось?

Спасибо!


person user2437770    schedule 30.05.2013    source источник
comment
Это дает мне ошибку в bash (ОРИГИНАЛ: команда не найдена и оболочка: команда не найдена). Но это работает: RESULT=$(echo $ORIGINAL | sed 's/\//\\/g')   -  person lurker    schedule 30.05.2013
comment
Я считаю, что окна будут принимать косую черту: вам нужно это делать?   -  person glenn jackman    schedule 31.05.2013


Ответы (3)


Я пытаюсь продублировать ваш тест в make-файле, но у меня нет вашей среды. Но я бы не стал использовать «/» в качестве разделителя команд, если я ищу один и тот же символ. Используйте другой символ, например ':'

sed 's:/:\\:g'
person Bruce Barnett    schedule 30.05.2013
comment
Это такая экономия времени! Хотел бы я знать об изменении разделителей в sed впереди. - person radj; 18.08.2017

Скорее всего оболочка, которую вызывает make, не является bash. Однако я нахожу поведение, которое вы видите, очень странным для любой оболочки (она заменяет первое слово, но не остальные?!?!)

Рассматривали ли вы возможность использования функции $(subst ...) GNU make вместо оболочки?

person MadScientist    schedule 30.05.2013
comment
Замена косой черты: РЕЗУЛЬТАТ := $(subst /,\\,$(ОРИГИНАЛ)) - person Rubén Pozo; 15.02.2018

person    schedule
comment
Это не будет работать в make-файле, потому что он использует <<<, который является функцией bash и не поддерживается в стандарте POSIX sh, который использует make. В любом случае, оригинальный пример работает в оболочке, нет необходимости прибегать к <<< - person MadScientist; 31.05.2013