Проблемы замены обратной косой черты в путях
Я пытаюсь заменить обратную косую черту в путях Windows, чтобы я мог вставить путь в Filezilla, чтобы открыть папку без необходимости просмотра в структуре каталогов. Я использую следующую команду:
echo '\path\to\the\05_directory' | sed -e 's/\\/\//g'
Мой ожидаемый результат
/path/to/the/05_directory
но вместо этого я получаю
/path o he_directory
похоже на то \t
а также \05
интерпретируются как нечто отличное от буквенных строк.
Почему это происходит? Как я могу обойти это?
0 ответов
Вы можете использовать printf "%q"
напечатать буквальный \
против их интерпретации как вкладки:
printf "%q" '\path\to\the\05_directory'
\\path\\to\\the\\05_directory
Тогда вы можете использовать sed
чтобы получить результат:
printf "%q" '\path\to\the\05_directory' | sed -e 's|\\\\|/|g'
/path/to/the/05_directory
В "%q"
field подготавливает строку для использования в оболочке. Это, конечно, означает, что' '
будет экранирован:
printf "%q" '\path\to\the\05 directory'
\\path\\to\\the\\05\ directory
Что вы можете очистить отдельно:
printf "%q" '\path\to\the\05 directory' | sed -e 's|\\\\|/|g; s|\\||g'
/path/to/the/05 directory
Понятно, что ваши строки читаются как строковые литералы с escape-последовательностями.
Убедитесь, что вы удвоили обратную косую черту:
echo '\\path\\to\\the\\05_directory' | sed -e 's/\\\\/\\//g'