1

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

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

Ожидаемый результат: example.com-sub-folder-files-file.txt

Я могу удалить https, но я не могу заменить оставшиеся слеши на:

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

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

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

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

2 ответа2

1

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

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

echo 'https://example.com/sub/folder/files/file.txt' | sed 's,http[s]*:\/\/,,;s,/,-,g'
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://» на ничто (удаляя его), а затем заменил все «/» на «-». легко легко.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .