GNU/Linux >> Belajar Linux >  >> Linux

linux bash, string case unta untuk dipisahkan dengan tanda hubung

Saya mengusulkan untuk menggunakan sed untuk melakukan itu:

NEW=$(echo MyDirectoryFileLine        \
     | sed 's/\(.\)\([A-Z]\)/\1-\2/g' \
     | tr '[:upper:]' '[:lower:]')

UPD Saya lupa mengonversi ke huruf kecil, kode yang diperbarui


Anda dapat menggunakan s/\([A-Z]\)/-\L\1/g untuk menemukan huruf besar dan menggantinya dengan tanda hubung dan itu huruf kecil. Namun, ini memberi Anda tanda hubung di awal baris, jadi Anda memerlukan ekspresi sed lain untuk mengatasinya.

Ini harus bekerja:

sed --expression 's/\([A-Z]\)/-\L\1/g' \
    --expression 's/^-//'              \
    <<< "MyDirectoryFileLine"

Linux
  1. Dinginkan prompt Bash Anda di Linux

  2. Bagaimana Cara Mempersingkat Bash Prompt di Linux?

  3. Menggunakan Referensi Ke Variabel Bash String Di Sed?

  1. Bagaimana saya bisa menambahkan string ke awal setiap file dalam folder di bash?

  2. Abaikan huruf besar-kecil di glob() di Linux

  3. Cara mengganti string dalam banyak file di baris perintah linux

  1. Mengurai riwayat Bash di Linux

  2. Apa yang dilakukan 'bash -c'?

  3. Hapus semua karakter khusus dan huruf besar-kecil dari string di bash