轉換和刪除重複命令tr

2021-09-06 13:00:59 字數 3334 閱讀 9679

前幾篇文章介紹了幾個用於處理字元的命令和工具,然而在處理大小寫轉換、刪除重複字元等任務時,這些命令處理起來相對較為麻煩。這裡將簡單介紹linux下自帶的tr命令,相對於其他命令而言,其語法較為簡單,比較方便記憶。

tr命令用於處理字元轉換、刪除重複字元等任務。

tr [option] [string1] [string2]

在tr的基本命令格式中,string1用於查詢字串,string2用於轉換查詢到的字串。tr命令不能讀取檔案,如果要轉換檔案中的內容,可以使用重定向輸入或管道的方法。

c:使用string1字符集中的補集替換,要求的字符集為ascii。

d:刪除string1中包含的所有字元。

s:將所有重複出現的字元進行壓縮,只保留乙個字元,即刪除重複的字元。

在使用tr命令時,還需要指定string1和string2這兩個格式化字串,字串的形式可以是字元的範圍、單個字元、多字元列表等。常見的字串形式及其含義如下:

[a-z]:小寫字母a-z範圍內的字元及其組合而成的字串。

[a-z]:大寫字母a-z範圍內的字元及其組合而成的字串。

[0-9]:數字0-9範圍內的字元及其組合。

[c*n]:這個表示式中,c表示字元或字元組合,n表示重複出現的次數。即字元或字元組合出現n次的字串。

除了以上這些常見的字串形式以外,tr命令還支援在字串中查詢和處理一些特殊的字元,這些字元通常都使用乙個八進位制數字表示。常見的特殊字元及其對應的八進位制表示形式如下:

\012:新的一行,在其他命令中經常使用\n表示。

\011:相當於乙個tab鍵,有些命令使用\t表示。

\015:enter鍵(即換行符),在其他命令中經常使用\r表示。

\014:新的一頁,在其他命令中經常使用\f表示。

使用命令時,最常見的任務是對乙個字串執行轉換。

(1)最常見的字串轉換是大小寫的轉換。例如需要將乙個字串中的字元全部轉換為大寫:

[root@localhost test]# echo "

this is a test string.

" | tr -s "

[a-z]""

[a-z]

"this is a test string.

[root@localhost test]# cat test

this

isthe first line.

this

isthe second line.

[root@localhost test]# tr -s "

[a-z]""

[a-z]

"this is the first line.

this is the second line.

[root@localhost test]# cat test

this

isthe first line.

this

is the second line.

原檔案test中的文字並沒有改變。

(3)除了可以使用[a-z]、[a-z]這樣的形式外,還可以使用乙個列表的形式。例如需要將test中的小寫字母tfls轉換成大寫字母:

[root@localhost test]# tr -s "

tfls""

tfls

"this is the first line.

this is the second line.

注意:列表中的字元是一一對應的(t-t、f-f、l-l、s-s),另外需要注意此處列表與正規表示式中的列表的區別。

(4)除此之外,tr命令還可以對文字進行格式轉換,例如:

[root@localhost test]# cat test1

2821020225#liulu#0#a#b#0

\2821020115#liumi#b#c#0#0

\2721020321#xuli#0#d#a#0

\2921020632#xiayu#a#c#0#0

\2721010409#liwei#b#c#0

#d\2921050313#heli#b#0#d#0

\2721030227#wangtao#c#0#d#0

\[root@localhost test]# tr -s "#"

"\t"2821020225 liulu 0 a b 0

\2821020115 liumi b c 00\

2721020321 xuli 0 d a 0

\2921020632 xiayu a c 00\

2721010409 liwei b c 0

d\2921050313 heli b 0 d 0

\2721030227 wangtao c 0 d 0\

tr命令的另乙個重要功能是用來刪除字元,包括刪除重複字元和自定義的字符集等。

(1)使用tr命令刪除重複字元時,需要指定字串或文字中可能存在重複的字元集合,因此僅需要使用string1即可。例如:

[root@localhost test]# echo "

hhhheeeelloo

" | tr -s "

heo"

hello

(2)還可以使用乙個巨大的字符集刪除可能存在的重複字元。例如要刪除所有字母的重複:

[root@localhost test]# echo "

hhhheeeellooo

" | tr -s "

[a-z][a-z]

"helo

[root@localhost test]# cat test2ab

c[root@localhost test]# tr -s "\n"

c

(4)也可使用八進位制數表示特殊字元。刪除多餘空行的命令也可以寫成:

[root@localhost test]# tr -s "

\012

"c

(5)tr命令還可以用來刪除特定的字符集:

[root@localhost test]# echo "

my name is jhon.

" | tr -d "

msn"

my ae i jho.

注意:tr命令在處理替換和刪除時,採用逐字元查詢處理的方法。

轉換和刪除重複命令tr

前幾篇文章介紹了幾個用於處理字元的命令和工具,然而在處理大小寫轉換 刪除重複字元等任務時,這些命令處理起來相對較為麻煩。這裡將簡單介紹linux下自帶的tr命令,相對於其他命令而言,其語法較為簡單,比較方便記憶。tr命令用於處理字元轉換 刪除重複字元等任務。tr option string1 str...

tr 轉換和刪除字元

常見選項 d delete 刪除所有屬於第一字符集的字元 s squeeze repeats 把連續重複的字元以單獨乙個字元表示,即去重 t truncate set1 將第乙個字符集對應字元轉化為第二字符集對應的字元 c c complement 取字符集的補集 範例 該命令會把 etc issu...

Linux 字元轉換命令tr

tr traslate的縮寫 可以用來刪除一段資訊當中的文字,或者是進行文字資訊的替換!root www tr ds set1 選項與引數 d 刪除資訊當中的 set1 這個字串 s 取代掉重複的字元!範例一 將 last 輸出的資訊中,所有的小寫變成大寫字元 root www last tr a ...