替換 url 中的斜杠

替換 url 中的斜杠

我想替換網址中的所有斜線。

地址範例:https://example.com/sub/folder/files/file.txt

預期結果:example.com-子資料夾-檔案-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 來取代斜線只會刪除遇到的第一個斜線。我究竟做錯了什麼?

答案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 命令的參數,它不需要是 '/' ,我更喜歡使用根本不參與搜索和替換的符號,因為它會節省您一些過度思考帶有轉義字符,以及替換/ 時的潛在錯誤。

另外,您可以使用 -e 選項將 sed 中的一些命令串在一起,如上所示,我將 'https://' 替換為空(刪除它),然後將所有 '/' 替換為 '-'。慢慢來。

希望對您有幫助

答案2

你不需要雙echo

我不明白你的意思加入第二個 sed 來取代斜線只會刪除遇到的第一個斜線。sed -您的範例中只有一個命令。您可以使用sed 以下兩個命令輕鬆執行您想要的操作:

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

相關內容