tr – (translate or delete characters ) 這個指令可以用來做字元的取代或是刪除.tr 只能針對字元來處理,如果要對字串做處理的話,必須使用 sed 來處理, 請參考 https://benjr.tw/97129
tr [OPTION]... SET1 [SET2]
下面是他常用的參數.
-d, –delete
刪除 SET1 定義的字元.
root@ubuntu:~# ls -l total 28 -rwxr-xr-x 1 root root 66 Jul 9 19:40 for.sh -rwxr-xr-x 1 root root 330 Jul 9 19:43 ping.sh -rw-r--r-- 1 root root 202 Jul 10 20:14 pw drwxr-xr-x 2 root root 4096 Jul 11 03:07 sas3 -rw-r--r-- 1 root root 5 Jul 10 00:23 text1.txt -rw-r--r-- 1 root root 5 Jul 10 00:26 text2.txt -rwxr-xr-x 1 root root 106 Jul 10 01:20 while.sh
可以看到關於小寫英文 [a-z] 的字元都被刪除了.
ubuntu:~# ls -l | tr -d [a-z] 28 --- 1 66 J 9 19:40 . --- 1 330 J 9 19:43 . ------ 1 202 J 10 20:14 -- 2 4096 J 11 03:07 3 ------ 1 5 J 10 00:23 1. ------ 1 5 J 10 00:26 2. --- 1 106 J 10 01:20 .
SETs 可以用下面的的特殊符號來表示:
- \NNN ASCII表 的八進制代碼
- \\ backslash (\ 反斜線)
- \a audible BEL (鈴聲)
- \b backspace (倒退鍵)
- \f form feed
- \n new line (換行)
- \r return (return 鍵)
- \t horizontal tab (tab 鍵)
- \v vertical tab
- CHAR1-CHAR2 從字元 1 到 字元2 按升序排列
- [CHAR*] in SET2, copies of CHAR until length of SET1
- [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0
- [:alnum:] 文字或是數位字元,表示為 [A-Z,a-z,0-9]
- [:alpha:] 文字字元,表示為 [A-Z,a-z]
- [:lower:] 小寫字元,表示為 [A-Z]
- [:upper:] 大寫字元,表示為 [a-z]
- [:digit:] 數位字元,表示為 [0-9]
- [:xdigit:] 十六進位數字 0-9,A(10),B(11),C(12),D(13),E(14),F(15),表示為 [0-9,a-f,A-F]
- [:space:] 所有空白字元 ,含 空白鍵, Tab, CR (新行)
- [:graph:] 除了空字元 (空白鍵與 Tab 按鍵) 外的其他鍵.
- [:print:] 非空字元 ,包括空格.
- [:cntrl:] 控制字元.
- [:punct:] 標點符號.
-s, –squeeze-repeats
如果有連續重覆的字元出現,就刪除只保留一個.
下面範例會刪除小寫英文 [a-z] 中連續重覆出現的字元,root 變成 rot 了.
root@ubuntu:~# ls -l | tr -s [a-z] total 28 -rwxr-xr-x 1 rot rot 66 Jul 9 19:40 for.sh -rwxr-xr-x 1 rot rot 330 Jul 9 19:43 ping.sh -rw-r--r-- 1 rot rot 202 Jul 10 20:14 pw drwxr-xr-x 2 rot rot 4096 Jul 11 03:07 sas3 -rw-r--r-- 1 rot rot 5 Jul 10 00:23 text1.txt -rw-r--r-- 1 rot rot 5 Jul 10 00:26 text2.txt -rwxr-xr-x 1 rot rot 106 Jul 10 01:20 while.sh
前面的例子可以改成為
root@ubuntu:~# ls -l | tr -s [:lower:] total 28 -rwxr-xr-x 1 rot rot 66 Jul 9 19:40 for.sh -rwxr-xr-x 1 rot rot 330 Jul 9 19:43 ping.sh -rw-r--r-- 1 rot rot 202 Jul 10 20:14 pw drwxr-xr-x 2 rot rot 4096 Jul 11 03:07 sas3 -rw-r--r-- 1 rot rot 5 Jul 10 00:23 text1.txt -rw-r--r-- 1 rot rot 5 Jul 10 00:26 text2.txt -rwxr-xr-x 1 rot rot 106 Jul 10 01:20 while.sh
-t, –truncate-set1
把 SET1 字元內容改成為 SET2 的.
下面的兩個例子都是把 小寫字元改成為 大寫字元.
root@ubuntu:~# ls -l | tr -t '[a-z]' '[A-Z]' TOTAL 28 -RWXR-XR-X 1 ROOT ROOT 66 JUL 9 19:40 FOR.SH -RWXR-XR-X 1 ROOT ROOT 330 JUL 9 19:43 PING.SH -RW-R--R-- 1 ROOT ROOT 202 JUL 10 20:14 PW DRWXR-XR-X 2 ROOT ROOT 4096 JUL 11 03:07 SAS3 -RW-R--R-- 1 ROOT ROOT 5 JUL 10 00:23 TEXT1.TXT -RW-R--R-- 1 ROOT ROOT 5 JUL 10 00:26 TEXT2.TXT -RWXR-XR-X 1 ROOT ROOT 106 JUL 10 01:20 WHILE.SH
root@ubuntu:~# ls -l | tr -t '[[:lower:]]' '[[:upper:]]' TOTAL 28 -RWXR-XR-X 1 ROOT ROOT 66 JUL 9 19:40 FOR.SH -RWXR-XR-X 1 ROOT ROOT 330 JUL 9 19:43 PING.SH -RW-R--R-- 1 ROOT ROOT 202 JUL 10 20:14 PW DRWXR-XR-X 2 ROOT ROOT 4096 JUL 11 03:07 SAS3 -RW-R--R-- 1 ROOT ROOT 5 JUL 10 00:23 TEXT1.TXT -RW-R--R-- 1 ROOT ROOT 5 JUL 10 00:26 TEXT2.TXT -RWXR-XR-X 1 ROOT ROOT 106 JUL 10 01:20 WHILE.SH
沒有解決問題,試試搜尋本站其他內容