Shell筆記 命令 tr

2021-08-18 22:41:02 字數 4219 閱讀 1512

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 所有小寫字元...