Заменить слеши в URL

Заменить слеши в URL

Я хотел бы заменить все слеши в веб-адресе.

Пример адреса:https://example.com/sub/folder/files/file.txt

Ожидаемый результат:example.com-подпапка-файлы-файл.txt

Я могу убрать https, но, похоже, не могу заменить оставшиеся слеши на:

echo $(echo 'https://example.com/sub/folder/files/file.txt' | sed 's/http[s]*:\/\///')

Вышеизложенное дает мне только это:

example.com/sub/folder/files/file.txt

Добавление второго sed для замены слешей удаляет только первый встреченный. Что я делаю не так?

решение1

попробуй это:

echo "https://www.example.com/sub/folder/files/file.txt" | sed -e 's#http[s]://##' -e 's#/#-#g'

результат: www.example.com-sub-folder-files-file.txt

причина, по которой он заменял только «первый встреченный», заключается в том, что вы пропустили g в качестве последнего «параметра», переданного sed, он обозначает глобальный и заменит все найденные экземпляры желаемой заменой, без него он заменит только первый найденный экземпляр.

Также стоит отметить, что вы можете разделять параметры команды sed любым символом, это не обязательно должен быть «/». Я предпочитаю использовать символ, который вообще не участвует в поиске и замене, так как это избавит вас от лишних раздумий по поводу экранирования символов и потенциальной ошибки при замене «/».

Кроме того, вы можете объединить несколько команд в sed, используя опцию -e, как вы можете видеть выше, я заменил «https://» ничем (удалив его), а затем заменил все «/» на «-». Легко, легко.

Надеюсь, это вам поможет.

решение2

Вам не нужен двойной echo.

Я не понимаю, что ты имеешь в виду.Добавление второго sed для замены слешей удалит только первый встреченный.- в вашем примере только одна sed команда. Вы можете легко сделать то, что хотите, с помощью 2 sed команд, например:

echo 'https://example.com/sub/folder/files/file.txt' | sed 's,http[s]*:\/\/,,;s,/,-,g'

Связанный контент