tr命令解析 學習筆記

2021-09-20 23:15:23 字數 4776 閱讀 7279

參考:man,info,magedu講義

宣告:以下英文純屬個人翻譯,英文b級,歡迎糾正,盜版不糾,才能有限,希望不誤人子弟為好。

1、使用目的與場景

把stdin的字元進行轉換,壓縮,刪除的操作,然後輸出到stdout上,具體案例在什麼實際工作**能用到因為還沒有參加工作,所以先不揣測,但是應該可以對文字進行操作。應該類似於windows下的查詢替換的功能。

2、官方說明

translate, squeeze, and/or delete characters

3、寫在前面

tr的使用主要還是在格式上的理解,如何去更簡潔的表達你想要修改的字符集,選擇合適的選項,達到你想要字符集修改的效果。選項一般為單詞的簡寫取首,加上長位元組利於自己記憶,然後就是要理解這個單詞的具體用法,這就要自己摸索著時間,將別人講的轉化為自己的理解,看八百遍講義不敲不琢磨,除非你天才。

4、修改檔案及涉及的環境變數

5、用法

12

3

4

5

6

7

tr[option]... set1 [set2]

#選項的理解

#當沒有選項時,預設執行-t轉換操作,-t 可以省略不寫,這時不能只有set1沒有set2,要成對。

-c -c  --complement求補,求set1的補集(所有不是set1字元的字元)

-d     --delete 刪除,刪除set1的字元不進行轉化,那麼set2就不用新增了,

-s    --squeeze-repeats 擠壓重複字元,

-t    --truncate-set1 將第乙個字符集對應字元轉化為第二字符集 對應的字元

引數的格式問題:

這裡感覺好多引數的格式都是基於shell可以識別的一種萬用字元的格式,並非正規表示式(需要正規表示式 去解釋),比如說[0-9][a-z],但是這種有相容性問題,還是用這些字元類表達比較好[:alpha:][:digit:] 

\r \n \nnn 這種風格的,還有^,

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

正常字元表示正常字元

char1-char2  all characters from char1 to char2inascending order

[char*]   用在set2,複製char字元直到長度和set1相同

[char*n]  代表有n個重複的char字元,n如果是0開頭就是8進製,不是就是10進製。

#引數可以是轉義字元

\nnn   字元用八進位制表示可以去檢視下ascii編碼然後對應轉化為八進位制

\\     表示轉義字元本身

\a     audible bel

\b     backspace

\f     form feed

\n     回車

\r     換行

\t     水平tab

\v垂直tab

#字元類有哪些?以下下是預定義類。

[:digit:] 所有數字

[:lower:] 所有小寫

[:upper:] 所有大寫

[:alpha:] 所有字母

[:alnum:] 所有字母和數字

[:punct:] 標點符號

[:space:] 所有水平和垂直空白

[:graph:] 列印字元,不包括空格

[:print:] 可列印字元,包括空格

[:cntrl:] 控制字元,表示哪些不曉得?

[:xdigit:] 所有16進製制數字

[=c=]是個最近的發明,旨在擴充套件到所有非字母字元,但並不是所有gnu tr都支援,這個回頭試試,看能不能匹配匹配中文。

tr set1 set2,當set1和set2的字元長度不同時什麼情況

當set1小於set2 比如abc和1234,那麼只會講stdin中的abc替換為123,4就被忽略了

當set1大於set2 比如abcd和123,那麼我輸入abcdefg,就會被轉換成1233efg了,它會拿set2的最後乙個字元去替換set1中沒有匹配到的,比如abcde和123,那麼輸入abcdefg就會被轉成12333fg。

比如這裡 abc 和空格, 這裡會轉成3個空格。  

所以一般情況下要注意set1和set2要保持相同

學命令就像學文言文,給你說了文言文格式,但是要翻譯的好,還是要看你的語文功底了。

實際的案例:(根據實際當中的操作不定期補充

1、ss -nt |tail -n +2 |tr -s " " ":"| cut -d ":" -f 41

2

3

4

5

6

7

8

9

[root@centos6]#ss -nt

state      recv-q send-q local address:port  peer address:port

estab      0      0   172.18.23.6:22    172.18.1.50:1696

estab      0      0   172.18.23.6:22    172.18.1.50:12053

estab      0      0   172.18.23.6:22    172.18.1.50:12226

[root@centos6]#ss -nt |tail -n +2 |tr -s " " ":"| \

>cut-d":"-f 4 |uniq-c

3 172.18.23.6

[root@centos6]#

這裡是把空格壓縮然後抓換為冒號。

這裡的-s相當於-st,當有set1和set2存在時,t是預設值可以不寫。

2、echo 12345|tr '0-9' '987654321'

Shell筆記 命令 tr

tr,主要用於將從標準輸入讀取的資料進行結果集對映 字元壓縮和字元刪除 主要用於刪除檔案中的控制字元或進行字元轉換 之所以說tr是對映而不是替換,是因為兩個結果集替換的時候符號位置是一一對應的。如果set1比set2短,則set2多餘的部分會被忽略,如果set1比set2長,posix認為這是不合理...

Shell筆記 命令 tr

tr,用來從標準輸入中通過替換 刪除進行字元轉換 主要用於刪除檔案中的控制字元或進行字元轉換 使用時,提供兩個字串,串1 用於查詢,串2 用於處理各種轉換 串1 的字元被對映到串2 上,然後轉換開始 主要用途 1.大小寫轉換 2.去除控制字元 3.刪除字元 命令格式 tr c d s str fro...

Linux基礎學習筆記之tr命令

1.通過whatis命令,知道了tr命令用來替換字元或者刪除字元 2.通過tr help命令可以知道tr命令的具體用法 xh centos6 tr help usage tr option set1 set2 set1 需要進行操作的字符集 set2 指定要轉換成的字符集 translate,squ...