shell | tr命令
用途
tr,translate的簡寫,用於字符轉換、壓縮重復字符或刪除文件中的控制字符。
tr指令從標准輸入設備讀取數據,經過字符串轉譯后,將結果輸出標准輸出設備(只接受標准輸入,不接受文件參數)。
語法
tr [- cdst ][-- help ][-- version ][第一字符集][第二字符集]
tr [ OPTION ]… SET1 [ SET2 ]
參數說明
- -c, --complement:反選設定字符。用於字符補集替換,用SET2替換SET1中不包含的字符
- -d, --delete:刪除指令字符,刪除SET1指定的所有字符
- -s, --squeeze-repeats:縮減連續重復的字符成指定的單個字符,用SET1指定的字符來替換對應的重復字符
- -t, --truncate-set1:將SET1中字符用SET2對應位置的字符進行替換,一般缺省為-t
- --help:顯示程序用法信息
- --version:顯示程序本身的版本信息
字符集合的范圍
- \NNN 八進制值的字符 NNN (1 to 3 為八進制值的字符)
- \ 反斜杠
- \a Ctrl-G 鈴聲
- \b Ctrl-H 退格符
- \f Ctrl-L 走行換頁
- \n Ctrl-J 新行
- \r Ctrl-M 回車
- \t Ctrl-I tab鍵
- \v Ctrl-X 水平制表符
- CHAR1-CHAR2 :字符范圍從 CHAR1 到 CHAR2 的指定,范圍的指定以 ASCII 碼的次序為基礎,只能由小到大,不能由大到小。
- [CHAR*] :這是 SET2 專用的設定,功能是重復指定的字符到與 SET1 相同長度為止
- [CHAR*REPEAT] :這也是 SET2 專用的設定,功能是重復指定的字符到設定的 REPEAT 次數為止(REPEAT 的數字采 8 進位制計算,以 0 為開始)
- [:alnum:] :所有字母字符與數字
- [:alpha:] :所有字母字符
- [:blank:] :所有水平空格
- [:cntrl:] :所有控制字符
- [:digit:] :所有數字
- [:graph:] :所有可打印的字符(不包含空格符)
- [:lower:] :所有小寫字母
- [:print:] :所有可打印的字符(包含空格符)
- [:punct:] :所有標點字符
- [:space:] :所有水平與垂直空格符
- [:upper:] :所有大寫字母
- [:xdigit:] :所有 16 進位制的數字
- [=CHAR=] :所有符合指定的字符(等號里的 CHAR,代表你可自訂的字符)
實例
-
-s 替換重復的字符
# 將連續重復的多個字符替換為單個字符,SET1指定了字符串要被操作的字符
echo "aaabbbaacccfddd" | tr -s [abcdf] // 輸出 abacfd
# 刪除空白行
tr -s ["\n"]
-
-d 刪除字符
# 刪除字符串中所有字母
echo "a12HJ13fdaADff" | tr -d "[a-z][A-Z]" //輸出 1213
# 刪除字符串中所有匹配SET1集合中的字符
echo "a1213fdasf" | tr -d [adfs] // 輸出 1213
# 刪除文件FileName中的數字、點、空格、橫杠
cat FileName | tr -d "[0-9][.][\-][ ]"
-
-t 字符替換,一般缺省為-t,SET1和SET2中字符一一對應
# 將文件FileName中的小寫字母全部轉換成大寫字母:
cat FileName |tr a-z A-Z
cat FileName |tr -t a-z A-Z
cat FileName |tr [:lower:] [:upper:]
# 將字符串中的SET1字符用SET2中字符替換
echo "a1213fdasf" | tr -t [afd] [AFO] // 輸出 A1213FOAsF
-
-c 字符補集替換
# 文件FileName
Python 2015.9 - 2018.11
Linux 2016.4 - 2018.11
C 2013.9 - 2014.9
Golang 2018.11 -
# 刪除文件FileName中的除字母以外的字符
cat FileName | tr -cs "[a-z][A-Z]" "\n"
cat FileName | tr -c "[a-z][A-Z]" "#" | tr -s "#" | tr -t "#" "\n"
// 輸出
Python
Linux
C
Golang