Я хотел бы заменить все слеши в веб-адресе.
Пример адреса: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'