Замінити риси в URL-адресі


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

Додавання другого седа для заміщення подряпин видаляє лише першу зустріч. Що я роблю неправильно?

Відповіді:


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: //' нічим (видаливши його), а потім замінив всі '/' на '-'. легко.

Сподіваюся, що це допоможе вам


Це допомогло, я пропустив g для глобального. Дуже дякую! Я приймаю ваше як відповідь на читаність в трубі sed.
stargazer

1

Вам не потрібно подвійно echo.

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

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

Подвійний ехо - це тільки для прикладу, насправді це не було необхідно. У моєму сценарії я використовую його для встановлення змінної. Г для глобальної це те, що я пропустив.
stargazer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.