Jika saya memiliki garis sebagai:
Thhiisss iisss mmyyy nameeee
Saya ingin mencetak ini sebagai:
This is my name
Apa perintah unix untuk ini?
Jika saya memiliki garis sebagai:
Thhiisss iisss mmyyy nameeee
Saya ingin mencetak ini sebagai:
This is my name
Apa perintah unix untuk ini?
Jawaban:
Dengan tr:
echo "Thhiisss iisss mmyyy nameeee" | tr -s 'a-z'
Penjelasan: -sberalih dari tr"meremas" karakter berulang. Seperti yang ditunjukkan, sakelar dapat digunakan dengan serangkaian karakter: ahingga z.
Pada sistem GNU Anda harus menggunakan sedatau serupa jika lokal Anda menggunakan karakter multibyte ( seperti yang disarankan jimmij ) karena GNU trhanya dapat mereferensikan karakter per byte. Di lokal ASCII Anda dapat menghapus semua duplikat dengan tr:
LC_ALL=C tr -s '\0-\255' <input
Begitu...
echo Thhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\0-\255'
... mencetak ...
This is my name
Anda juga dapat melakukannya secara selektif dengan merujuk target Anda berdasarkan rentang:
echo TThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '\101-\132'
...atau...
echo TTTThhiisss iisss mmyyy nameeee|
LC_ALL=C tr -s '[:upper:]'
... yang berfungsi menjadi hal yang sama, dan yang keduanya mencetak:
Thhiisss iisss mmyyy nameeee
... atau penggunaan [:punct:], [:digit:], [:lower:], [:alpha:]atau apa pun yang Anda inginkan. Anda juga dapat meniadakan pilihan -cdengan ...
echo 'TTTThhiisss iisss mmyyy nameeee' |
LC_ALL=C tr -cs '[:upper:]'
... mencetak ...
TTTThis is my name