Ganti garis miring dalam url


1

Saya ingin mengganti semua garis miring dari alamat web.

Alamat contoh: https://example.com/sub/folder/files/file.txt

Hasil yang diharapkan: example.com-sub-folder-file-file.txt

Saya dapat menghapus https tetapi sepertinya saya tidak dapat mengganti garis miring yang tersisa dengan:

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

Di atas hanya memberi saya ini:

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

Menambahkan sed kedua untuk menggantikan garis miring hanya menghilangkan yang pertama kali ditemukan. Apa yang saya lakukan salah?

Jawaban:


1

coba ini:

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

hasilnya adalah: www.example.com-sub-folder-file-file.txt

alasan itu hanya mengganti 'pertama ditemui' adalah karena Anda kehilangan g sebagai 'parameter' terakhir dilewatkan ke sed, itu singkatan global dan akan mengganti semua instance ditemukan dengan penggantian yang diinginkan, tanpa itu, itu akan menggantikan hanya contoh pertama ditemukan.

Juga perlu dicatat bahwa Anda dapat memisahkan parameter dari perintah sed dengan simbol apa pun, itu tidak perlu menjadi '/', saya lebih suka menggunakan simbol yang tidak terlibat dalam pencarian dan ganti sama sekali, karena akan menghemat beberapa pemikiran berlebihan. dengan karakter eascaping, dan bug potensial ketika Anda mengganti /.

Selain itu, Anda dapat merangkai bersama beberapa perintah dengan menggunakan opsi -e, seperti yang Anda lihat di atas, saya mengganti 'https: //' dengan tidak ada (menghapusnya), lalu mengganti semua '/' dengan '-'. mudah mudah.

Semoga ini bisa membantu Anda


Itu membantu, saya merindukan g untuk global. Terima kasih banyak! Saya menerima Anda sebagai jawaban untuk keterbacaan dalam pipa sed.
stargazer

1

Anda tidak perlu ganda echo.

Saya tidak mengerti apa yang Anda maksud dengan Menambahkan sed kedua untuk mengganti garis miring hanya menghilangkan yang pertama kali ditemukan. - Anda hanya memiliki satu sed perintah dalam contoh Anda. Anda dapat dengan mudah melakukan apa yang Anda inginkan dengan 2 sed perintah seperti itu:

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

Gema ganda hanyalah sebagai contoh, itu memang tidak perlu. Dalam skrip saya, saya menggunakannya untuk mengatur variabel. G untuk global adalah apa yang saya lewatkan.
stargazer
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.