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"
x86_64 Perakitan Kebingungan Panggilan Sistem Linux
RealUID, UID Tersimpan, UID Efektif. Apa yang sedang terjadi?