Subscribe to RSS Subscribe to Comments Blog of Roy Chan

Blog of Roy Chan

Tr - TRanslate characters

以下早八年前為PCWeekly HKLUG專欄寫的文章:

tr 是 Unix/Linux 一個很普遍的小工具,其功能也很簡單,主要把一組字母 map 成另一組字元。舉個例,請在打以下的指令:

 tr vms wnt

打了後請亂打堆字再按 [Enter] ,你會發覺 tr 會重覆顯示你所打的字,但「v」會變成了「w」,「m」變成了「n」,「s」則變成了「t」。要結束這個遊戲可以開個新行打 Ctrl-D 再按 [Enter] 。好了,相信閣下現在應該知到了 tr 的作用是什麼了。 tr 最常會被用作轉換大小階,看過以上的例題,閣下或者以為要打:

 tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ

這長長的指令。事實上只要用「tr a-z A-Z」就夠了。

簡簡單單一個程式,配合 Unix 上其他工具就有很多妙用。如閣下要把一目錄上所有檔案名稱轉成大寫,以可以在 bash/ksh/sh 用以下指令:

 for f in *
 do
   mv $f `echo $f | tr a-z A-Z`
 done

要把 vi 上把某行全部轉成小寫,可以在 vi 的編輯模式打「!!tr A-Z a-z」,一個段落則可以打 「!}tr A-Z a-z」。要轉整個檔案可以打「:%!tr A-Z a-z」。

有沒有發覺原本在 DOS/WIN 的文字檔放到 Unix/Linux 上看,每行都多了個「^M」。這是因為 Unix 、 DOS 及 Mac 等的文字檔格式都有所分別。 Unix 習慣每行用一個 Linefeed (ASCII 10) 分格, Mac 用一個 Carrier Return (ASCII 13) ,而 DOS 則要用一個 Carrier Return 跟一個 Linefeed 來分格,檔尾還要加個 Ctrl-Z (ASCII 26) 。要把 DOS 或 Mac 的文字檔轉成 Unix/Linux 格式最簡單可以利用 tr 。

  • Mac 轉 Unix/Linux - tr \\015 \\012 <mac.txt >unix.txt
  • Unix/Linux 轉 Mac - tr \\012 \\015 <unix.txt >mac.txt
  • DOS/Win 轉 Unix/Linux - tr -d \\015\\032 <dos.txt >unix.txt

012, 015 和 032 分別是 10, 13 和 26 的八進位。參數「-d」則叫 tr 把輸入檔中所有包括在字元組中的字元刪掉。


Share It: [del.icio.us] [Technorati] [Google Bookmark] [Yahoo MyWeb] [Furl]


No comments yet. Be the first.

Leave a reply

  • :-)
  • :-D
  • :lol:
  • ;-)
  • :-P
  • :-(
  • :'(
  • :'-(
  • >:-(
  • :-O
  • :annoy:
  • :appeal:
  • :asleep:
  • Zzz...
  • :-Q
  • 8-)
  • B-)
  • :clap:
  • :enjoy:
  • :blush:
  • :shy:
  • :*
  • :inlove:
  • :inlove2:
  • :inlove3:
  • :love:
  • :allure:
  • 8D~~~
  • :amative:
  • :chatter:
  • :bored:
  • bored2:
  • X-O~~~
  • :-'|
  • 8-S
  • #_#
  • :dontknow:
  • :embarrased:
  • :excite:
  • :faint:
  • :fuzzy:
  • :plan:
  • :conceal:
  • :regret:
  • :punched:
  • :silent:
  • :-X
  • :tease:
  • :vent:
  • :win:
  • :work:
  • :good:
  • :shit:
  • :bomb:

Based on Fluidity© 1998-2007 Roy Hiu-yeung Chan