Cara termudah untuk mengganti spasi putih dengan (garis bawah) _ di bash [tertutup]

92

baru-baru ini saya harus menulis skrip kecil yang mem-parsing VM di XenServer dan karena sebagian besar nama VM dengan spasi putih di misalnya Windows XP atau Windows Server 2008, saya harus memangkas ruang putih tersebut dan menggantinya dengan garis bawah _. Saya menemukan solusi sederhana untuk melakukan ini menggunakan sed yang merupakan alat hebat dalam hal manipulasi string.

echo "This is just a test" | sed -e 's/ /_/g'

kembali

This_is_just_a_test

Apakah ada cara lain untuk melakukannya?

flazzarini
sumber
8
dan pertanyaannya adalah?
RageZ
2
Halo latz, Stackoverflow adalah situs tanya jawab. Anda mengajukan pertanyaan dan orang lain menjawabnya, atau Anda dapat menjawab pertanyaan dari orang lain. Jika Anda ingin berbagi pengetahuan, Anda dapat mengajukan pertanyaan, lalu menjawabnya sendiri (setelah menyisakan waktu agar orang lain juga dapat menjawabnya).
mouviciel
2
oups pikir saya akan menambahkan pengetahuan ini begitu sehingga disimpan di sini. Pokoknya akan melakukannya seperti yang Anda katakan lain kali, dengan menjawab pertanyaan saya sendiri :)
flazzarini

Jawaban:

175

Anda dapat melakukannya hanya dengan menggunakan shell, tidak perlu trataused

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test
anjing hantu74
sumber
5
Atau mengkonversi semua karakter kata non-ASCII ke garis bawah: ${str//[^a-zA-Z0-9]/_}; Bagaimanapun juga, jika Anda tidak menggunakan shell POSIX murni, gunakan fitur yang tersedia untuk Anda.
senjata
mungkin ada tanda baca yang sah juga. kita tidak pernah tahu.
ghostdog74
terima kasih untuk solusi ini persis apa yang saya cari. Terima kasih banyak
flazzarini
18

Ini adalah pemrograman garis batas, tetapi coba gunakan tr :

$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'

Harus melakukannya. Doa pertama menekan spasi, yang kedua menggantikan dengan garis bawah. Anda mungkin perlu menambahkan TAB dan karakter spasi kosong lainnya, ini hanya untuk spasi.

beristirahat
sumber