tr,主要用於將從標準輸入讀取的資料進行結果集對映、字元壓縮和字元刪除
主要用於刪除檔案中的控制字元或進行字元轉換
之所以說tr是對映而不是替換,是因為兩個結果集替換的時候符號位置是一一對應的。如果set1比set2短,則set2多餘的部分會被忽略,如果set1比set2長,posix認為這是不合理的,但也能執行,只不過結果有些意料之外
tr (選項) (引數)tr -c -d -s -t
-c或——complerment:取代所有不屬於第一字符集的字元;-d或——delete:刪除所有屬於第一字符集的字元;-s或--squeeze-repeats:把連續重複的字元以單獨乙個字元表示;-t或--truncate-set1:先刪除第一字符集較第二字符集多出的字元。要求字符集為ascii
tr -[sdtc]
使用時,提供兩個字串,串1:用於查詢,串2:用於處理各種轉換;串1的字元被對映到串2上,然後轉換開始
主要用途:1.大小寫轉換
2.去除控制字元
3.刪除字元
命令格式:
tr –c –d –s [「str_from」] [「str_to」] file
-c,用字串1中字符集的補集替換此字符集,要求字符集為ascii
-d,刪除字串1中所有輸入字串,tr -d
是刪除指定的符號,只能接乙個set1。
-s,刪除所有重複出現字串行,只保留乙個,即重複字串壓縮為乙個
-t
:截斷set1,使得set1的長度和set2的長度相同
tr -d
是刪除指定的符號,只能接乙個set1。
[root@xuexi tmp]# cat x.txt | tr -d " "
nonamesubjectidmark備註
1longshuai00156不及格
2gaoxiaofang00160及格
3zhangsan00150不及格
4lisi00180及格
5wangwu00190及格
tr -c set1 set2
是將標準輸入按照set1求補集,並將補集部分的字元全部替換為set2,即將不在標準輸入中存在但set1中不存在的字元替換為set2的字元。但是set2如果指定的字元大於1個,則只取最後乙個字元作為替換字元。使用-c的時候應該把-c set1作為乙個整體,不要將其分開。
例如:
[root@xuexi tmp]# echo "abcdefo"| tr -c "ao"
"y"ayyyyyoy[root@xuexi tmp]#
標準輸入"abcdefo"按照set1="ao"求得的補集為bcdef,將它們替換為y,結果即為ayyyyyo,但是結果的最後面多了乙個y並且緊接著命令提示符。這是因為abcdefo尾部的\n也是ao的補集的一部分,並將其替換為y了。如果不想替換最後的\n,可以在set1中指定\n。
[root@xuexi tmp]# echo "abcdefo"| tr -c "ao\n"
"y"
ayyyyyo
如果set2指定多個字元,將只取最後乙個字元作為替換字元。
[root@xuexi tmp]# echo "abcdefo"| tr -c "ao\n"
"ay"
ayyyyyo
[root@xuexi tmp]# echo "abcdefo"| tr -c "ao\n"
"yb"
abbbbbo
"-c"常和"-d"一起使用,如tr -d -c set1
。它先執行"-c set1"求出set1的補集,再對這個補集執行刪除。也就是說,最終的結果是完全匹配set1中的字元。注意,"-d"一定是放在"-c"前面的,否則被解析為tr -c set1 set2
,執行的就不是刪除補集,而是替換補集為"-d"的最後乙個字元d了。
[root@xuexi tmp]# echo "one 1 two 2 three 3"| tr -d -c "[0-9]\n" # 對數字和分行符求補集,並刪除這些補集符號
123[root@xuexi tmp]# echo "one 1 two 2 three 3"| tr -d -c "[0-9] \n" # 再加乙個空格求補集 12
3[root@xuexi tmp]# echo "one 1 two 2 three 3"| tr -c "[0-9]\n" -d # -d選項放在-c選項的後面是替換行為
dddd1ddddd2ddddddd3
[root@xuexi tmp]# echo "one 1 two 2 three 3"| tr -d -c "[a-za-z]\n" # 保留字母
onetwothree
[root@xuexi tmp]# echo "one 1 two 2 three 3"| tr -d -c "[a-za-z] \n" # 保留字母的同時保留空格
字元範圍——tr,可以指定字串列表或範圍作為形成字串的模式,似正則,但不是正則。
[a-z] [a-z] [0-9] /octal乙個三位八進位制數,對應有效ascii字元
[s*n]字元s出現n次
tr 中特定字元的不同表達方式
/actrl-g鈴聲
/007
/bctrl-h退格
/010
/fctrl-l走紙模式
/014
/nctrl-j新行
/012
/rctrl-m回車
/015
/tctrl-i tab鍵
/011
/vctrl-x
/030
在tr中可以使用以下幾種字元類。這些類也可以用在其他某些命令中。
[:alnum:]
所有的數字和字母。
[:alpha:]
所有的字母。
[:blank:]
所有水平空白=空格+tab。
[:cntrl:]
所有控制字元(非列印字元),在ascii表中的八進位制0-37對應的字元和177的del。
[:digit:]
所有數字。
[:graph:]
所有列印字元,不包含空格=數字+字母+標點。
[:lower:]
所有小寫字母。
[:print:]
所有列印字元,包含空格=數字+字母+標點+空格。
[:punct:]
所有標點符號。
[:space:]
所有水平或垂直空白=空格+tab+分行符+垂直tab+分頁符+回車鍵。
[:upper:]
所有大寫字母。
[:xdigit:]
所有十六進製制數字。
使用方法例如下面的。例如[:upper:]等價於[a-z],[:digit:]等價於[0-9]。
1. 去除所有重複字元【只保留乙個】
$tr –s 「[a-z]」 < oops.txt
2. 去除空行
$tr –s 「[/012]」 $tr –s 「[/n]」 3. 小寫轉大寫
$echo 「abcdefg」 | tr 「[a-z]」 「[a-z]」
$echo 「abcdefg」 | tr 「[:lower:]」 「[:upper:]」
4. 刪除指定字串
$tr –cs 「[a-z][a-z]」 「[/012*]」 < data.txt
將非字母字元轉為新行 -s壓縮重複的字元
5. 轉換控制字元
$tr –s 「[/136]」 「[/011*]」 < start.txt
6. 快速轉換
$tr –s 「[/r]」 「[/n]」 < input.txt
7. 匹配多於乙個字元
$tr 「[0*4]」 「*」< input.txt
Shell筆記 命令 tr
tr,用來從標準輸入中通過替換 刪除進行字元轉換 主要用於刪除檔案中的控制字元或進行字元轉換 使用時,提供兩個字串,串1 用於查詢,串2 用於處理各種轉換 串1 的字元被對映到串2 上,然後轉換開始 主要用途 1.大小寫轉換 2.去除控制字元 3.刪除字元 命令格式 tr c d s str fro...
shell學習筆記,tr
tr,用來從標準輸入中通過替換 刪除進行字元轉換 主要用於刪除檔案中的控制字元或進行字元轉換 使用時,提供兩個字串,串1 用於查詢,串2 用於處理各種轉換 串1的字元被對映到串2上,然後轉換開始 主要用途 1.大小寫轉換 2.去除控制字元 3.刪除字元 命令格式 tr c d s str from ...
shell中常用的命令 tr命令
tr命令主要功能是轉化 引數 說明 c c 字串替換,要求字符集為ascii d刪除字元 s刪除所有重複出現字串行,只保留第乙個 即將重複出現字元壓縮為乙個字串 t刪除第一字符集較第二字符集多出的字元 引數 說明 gidit 所有數字 graph 所有可列印字元,不包括空格 lower 所有小寫字元...