Ok, jadi terima kasih kepada @Prvt_Yadv saya bisa mengerti titik-titiknya. Inilah jawaban pertanyaan pertama:
Apa keajaiban di balik tr
perintah kedua ?
13 titik hanya dipetakan ke 13 huruf pertama dari set kedua. Begitu
tr .............A-Z A-ZA-Z
akan menghasilkan set berikut:
SET1 -> .............ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
Jika input Anda tidak mengandung titik, Anda dapat membuang urutan awal, karena Anda tidak akan menggunakan substitusi itu. Maka set akan menjadi:
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
Tapi karena set pertama sudah berisi semua 26 huruf dan set2 telah mengulangi huruf trailing, mereka juga dibuang, akhirnya menjadi
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM
Yang merupakan substitusi rot13 dan identik dengan perintah pertama (kecuali untuk tidak berurusan dengan huruf kecil di sini). Logika yang sama dapat diterapkan untuk judul pertanyaan:
tr ...A-Z A-ZA-Z <<< “JVPQBOV”
akan menghasilkan set:
SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
Membuang urutan awal dan huruf berulang berulang menjadi:
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC
Yang merupakan substitusi rot3.
Sekarang untuk pertanyaan kedua:
Bagaimana cara membuat perintah kedua bekerja untuk huruf besar dan kecil, sama seperti perintah pertama?
Untuk membuatnya berfungsi, Anda meletakkan jumlah titik yang diinginkan di awal, mencocokkan busuk Anda dan 26 titik antara urutan atas dan urutan bawah, seperti ini:
tr ........A-Z..........................a-z A-ZA-Za-za-z
Ini akan berhasil membuat rot8 tidak sensitif. Untuk memvisualisasikan mengapa ini berhasil, mari kita lihat set:
SET1 -> ........ABCDEFGHIJKLMNOPQRSTUVXWYZ..........................abcdefghijklmnopqrstuvxwyz
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyzabcdefghijklmnopqrstuvxwyz
Tidak termasuk pemetaan titik dan huruf trailing:
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh
Sekarang berfungsi untuk huruf besar dan kecil :)
Cara lain untuk membuatnya berfungsi adalah dengan menggunakan dua tr
perintah sebagai berikut:
tr .............A-Z A-ZA-Z <<< "ABJ V hqrefgnaq" | tr .............a-z a-za-z
Peringatan untuk menggunakan penggantian titik diberikan oleh @iruvar: perintah ini tidak akan berfungsi seperti yang diharapkan ketika string input memiliki titik-titik. Ini karena titik-titik sedang dipetakan ke huruf lain dan ketika melakukan substitusi, tr
akan mengubah titik input ke huruf yang terakhir dipetakan. Tetapi Anda benar-benar dapat menggunakan karakter lain selain titik. Jadi, jika menggunakan titik-titik dalam tr
perintah Anda merupakan masalah, Anda dapat menggunakan @
sebagai gantinya, misalnya. Ini akan bekerja dengan baik:
tr @@@@@@@@@@@@@A-Z A-ZA-Z <<< "GUNAX LBH NYY..."