Tr
tr ’ 怎麼做a-z一種−和a-z’ ’n-z一-米n−和一種−米n-za-m’ 工作?
我發現了一個可以使用以下命令解密的混淆電子郵件地址:
echo "cbyrzba@cbyrzba.bet" | tr '[a-z]' '[n-za-m]'
那如何輸出一個有效的電子郵件地址?該命令在做什麼?
tr
的手冊頁解釋得很好;它是一種將字元從一組轉換為另一組的過濾器。指定的第一組是[a-z]
,它是一種簡寫方式[abcdefghijklmnopqrstuvwxyz]
。第二個是[n-za-m]
,變成了[nopqrstuvwxyzabcdefghijklm]
。tr
從標準輸入讀取每個字元,如果它出現在第一組中,則將其替換為第二組中相同位置的字元(這意味著[
and]
正在被自己替換,因此包括它們是沒有意義的,但是很多人這樣做是錯誤的,因為正則表達式使用它們來表示字元類,所以他們認為tr
需要它們)。所以一個更簡單的例子:
$ echo abc | tr ab xy xyc
a
變成x
,b
變成y
,並c
保持不變,因為它不在第一組中。在這種情況下,使用者所做的只是通過相同的過濾器執行他們的電子郵件地址(因為它是對稱的——a
映射到n
並n
返回到a
等)以獲得旋轉版本;你再次執行它會將所有字元交換回它們的原始狀態旁注:這種特殊的交換,其中每個字母被替換為字母表中距離它 13 個字元的一個,稱為ROT13(旋轉 13);它在新聞組中很流行,作為一種隱藏人們可能不想看到的東西的方式