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?
Jawaban:
Anda dapat melakukannya hanya dengan menggunakan shell, tidak perlu
tr
ataused
$ str="This is just a test" $ echo ${str// /_} This_is_just_a_test
sumber
${str//[^a-zA-Z0-9]/_}
; Bagaimanapun juga, jika Anda tidak menggunakan shell POSIX murni, gunakan fitur yang tersedia untuk Anda.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.
sumber