Проблемы замены обратной косой черты в путях

Я пытаюсь заменить обратную косую черту в путях 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'
Другие вопросы по тегам