亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 > linux shell tr命令詳解

      linux shell tr命令詳解

      時(shí)間: 佳洲1085 分享

      linux shell tr命令詳解

        tr命令是linux下的一個(gè)命令,那么它的語(yǔ)法和用途是什么呢?下面由學(xué)習(xí)啦小編為大家整理了linux shell tr命令的相關(guān)知識(shí),希望大家喜歡!

        linux shell tr命令

        tr是translate的簡(jiǎn)寫(xiě),亦即翻譯,但是遺憾的是,它不能翻譯句子,只能翻譯單個(gè)字符。

        1 工作原理

        先記住一點(diǎn),tr命令不接受指定的文件參數(shù),而只是對(duì)標(biāo)準(zhǔn)輸入進(jìn)行翻譯。好了,記住這點(diǎn)后,我們繼續(xù)。

        tr的命令格式是tr SET1 SET2,凡是在SET1中的字符,都會(huì)被替換為SET2中相應(yīng)位置上的字符,簡(jiǎn)單吧!

        2 例子

        tr的例子其實(shí)都大同小異,看一個(gè)最簡(jiǎn)單的例子:

        我們有一個(gè)包含了四個(gè)人身高的數(shù)據(jù)文件,名字叫height.txt,它的內(nèi)容是這樣的:

        [rocrocket@rocrocket programming]$ cat height.txt

        1.79 1.83

        1.65 1.59

        我們想搞一個(gè)惡作劇,將所有人的身高從1米級(jí)別都提高到2米級(jí)別,呵呵,一個(gè)tr就可以搞定。

        [rocrocket@rocrocket programming]$ tr 1 2 < height.txt

        2.79 2.83

        2.65 2.59

        希望你沒(méi)有忘記,tr只處理標(biāo)準(zhǔn)輸入,所以我們需要將height.txt通過(guò)重定向指到tr的標(biāo)準(zhǔn)輸入才可以。

        3 用tr來(lái)修改文件中的間隔符

        當(dāng)使用cut的時(shí)候,通常會(huì)被間隔符問(wèn)題所困擾,我們這個(gè)時(shí)候可以考慮到tr這個(gè)命令。

        還是以height.txt文件為例,其中的間隔符是空格,我們把它修改為制表符吧!

        [rocrocket@rocrocket programming]$ tr ‘ ‘ ‘′ < height.txt

        1.79 1.83

        1.65 1.59

        這里有一個(gè)小知識(shí)點(diǎn),像制表符、換行符這些字符不好表示,我們可以考慮使用ASCII的八進(jìn)制形式來(lái)表示,制表符的八進(jìn)制形式是11,回車(chē)是15,換行是12。而在tr命令中,可以使用\nnn形式表示八進(jìn)制形式的字符。如果你實(shí)在記不住這些編號(hào),那么用\t表示制表符你總該可以記住吧!(\n代表新行,\r代表回車(chē))

        這下,你應(yīng)該可以理解上面那條命令的作用了吧。如果你仍然懷疑,那么,看看下面這條命令,你就該心服口服了:

        [rocrocket@rocrocket programming]$ tr ‘ ‘ ‘′ < height.txt |sed -n l

        1.79\t1.83$

        1.65\t1.59$

        看!空格的的確確被替換成了制表符嘍!

        4 使用tr把文章中的小寫(xiě)都轉(zhuǎn)換成大寫(xiě)

        這個(gè)正是tr所擅長(zhǎng)的地方。

        加入我們擁有一個(gè)文件叫做word.txt,里面包含的內(nèi)容是AbcdE。

        那么最簡(jiǎn)單的替換大小寫(xiě)的方法是:

        [rocrocket@rocrocket programming]$ cat word.txt

        AbcdE

        [rocrocket@rocrocket programming]$ tr ‘a-z’ ‘A-Z’ < word.txt

        ABCDE

        5 [CHAR*]

        這是 SET2 專(zhuān)用的設(shè)定,功能是重復(fù)指定的字符到與 SET1 相同長(zhǎng)度為止

        例子:

        [rocrocket@rocrocket programming]$ cat number.txt

        1234567890

        [rocrocket@rocrocket programming]$ tr ‘1-5′ ‘[A*]‘ < number.txt

        AAAAA67890

        6 [CHAR*REPEAT]

        這也是SET2專(zhuān)用的設(shè)定,功能是將CHAR重復(fù)REPEAT次數(shù)。其中REPEAT次數(shù)可以用八進(jìn)制數(shù)表示,但記得要以0開(kāi)頭表示八進(jìn)制數(shù)。

        例子:

        [rocrocket@rocrocket programming]$ tr ‘1-9′ ‘[A*5]BCDE’ < number.txt

        AAAAABCDE0

        7 在tr中表示集合的符號(hào)

        [:alnum:] :所有字母字符與數(shù)字

        [:alpha:] :所有字母字符

        [:blank:] :所有水平空格

        [:cntrl:] :所有控制字符

        [:digit:] :所有數(shù)字

        [:graph:] :所有可打印的字符(不包含空格符)

        [:lower:] :所有小寫(xiě)字母

        [:print:] :所有可打印的字符(包含空格符)

        [:punct:] :所有標(biāo)點(diǎn)字符

        [:space:] :所有水平與垂直空格符

        [:upper:] :所有大寫(xiě)字母

        [:xdigit:] :所有 16 進(jìn)位制的數(shù)字

        例子:

        將所有的數(shù)字都轉(zhuǎn)換為字符x。

        [rocrocket@rocrocket programming]$ tr [:alnum:] ‘[x*]‘ < number.txt

        xxxxxxxxxx

        8 tr里面包含SET1和SET2,那如果出現(xiàn)兩個(gè)集合的大小不同的情況,tr如何處理

        這個(gè)問(wèn)題,最好的解決辦法就是做實(shí)驗(yàn)啊。

        第一種情況是SET1>SET2:

        [rocrocket@rocrocket programming]$ tr 1-5 AB < number.txt

        ABBBB67890

        結(jié)論一下子就出來(lái)了,SET1中多出來(lái)的字符都會(huì)和SET2中最后一個(gè)字符相對(duì)應(yīng)。

        第二種情況SET1

        [rocrocket@rocrocket programming]$ tr 1-3 ABCDE < number.txt

        ABC4567890

        很明了,SET2中多余的部分將被拋棄。

        9 tr命令的-s選項(xiàng)

        這個(gè)-s選項(xiàng),是專(zhuān)門(mén)針對(duì)SET1起作用的,意思是如果發(fā)現(xiàn)有連續(xù)的SET1里的字符,就把它們縮減為1個(gè)。

        一個(gè)很經(jīng)典的應(yīng)用就是把不規(guī)律的空格縮減為一個(gè)空格:

        [rocrocket@rocrocket programming]$ cat spaces.txt

        How are you?

        Fine! Thank you!

        [rocrocket@rocrocket programming]$ tr -s ‘ ‘ ‘ ‘ < spaces.txt

        How are you?

        Fine! Thank you!

        效果很明顯,用戶很滿意。恩!

        10 -d選項(xiàng)

        -d選項(xiàng)是用來(lái)刪除字符用的。格式是這樣的:tr -d charset

        [rocrocket@rocrocket programming]$ tr -d ‘ ‘ < spaces.txt

        Howareyou?

        Fine!Thankyou!

        看,該有的空格都沒(méi)了…這就是-d的作用,把空格都刪除了!

        如果你想把文章中的數(shù)字都刪除,就tr -d [0-9] < filename就可以了。

        語(yǔ)法:

        tr [options] [source-char-list] [replace-char-list] < filename

        用途:

        轉(zhuǎn)換字符,例如:將大寫(xiě)字符轉(zhuǎn)換成小寫(xiě)字符。選項(xiàng)可以讓你指定所要?jiǎng)h除的字符,以及將一串重復(fù)出現(xiàn)的字符濃縮成一個(gè)。

        常用選項(xiàng):

        -c: 取source-char-list的反義,所有不在source-char-list中的字符。常與-d , -s配合使用。

        -d: 刪除source-char-list中所定義的字符。

        -s: 濃縮重復(fù)的字符。如果標(biāo)準(zhǔn)輸入中連續(xù)重復(fù)出現(xiàn)source-char-list里所列的字符,則將其濃縮成一個(gè)。或者將其濃縮成replace-char-list中的字符。

        tr 'X' 'x' 把所有大寫(xiě)X轉(zhuǎn)換成小寫(xiě)x

        tr '()' '{}' 把( )替換成{ }

        tr '[a-z]' '[A-Z]' 把所有小寫(xiě)字母變成大寫(xiě)字母

        tr '[A-Z]' '[N-ZA-M]' 把字符A-M分別轉(zhuǎn)換成N-Z,而N-Z轉(zhuǎn)換成A-M

        tr -s ' ' ' ' 把多個(gè)空格轉(zhuǎn)換成單個(gè)空格

        tr -d '[0-9]' 刪除所有數(shù)字

        引用:[a-z] a-z內(nèi)的字符組成的字符串。

        [A-Z] A-Z內(nèi)的字符組成的字符串。

        [0-9] 數(shù)字串。

        /octal 一個(gè)三位的八進(jìn)制數(shù),對(duì)應(yīng)有效的A S C I I字符。

        [O*n] 表示字符O重復(fù)出現(xiàn)指定次數(shù)n。因此[ O * 2 ]匹配O O的字符串。

        大部分t r變種支持字符類(lèi)和速記控制字符。

        字符類(lèi)格式為[:c l a s s ],包含數(shù)字、希臘字母、空行、小寫(xiě)、大寫(xiě)、c n t r l鍵、空格、點(diǎn)記符、圖形等等。

        下表包括最常用的控制字符的速記方式及三位八進(jìn)制引用方式。

        當(dāng)用一個(gè)單字符替換一個(gè)字符串或字符范圍時(shí),注意字符并不放在方括號(hào)里( [ ])。一些系統(tǒng)也可以使用方括號(hào),例如可以寫(xiě)成[“\ 0 1 2”]或“\ 0 1 2”,t r也允許不加引號(hào),因此命令中看到單引號(hào)而不是雙引號(hào)時(shí)也不要感到奇怪。

        像大多數(shù)系統(tǒng)工具一樣, t r也受特定字符的影響。因此如果要匹配這些字符,需使用反斜線屏蔽其特殊含義。例如,用\ {指定花括號(hào)左邊可以屏蔽其特殊含義。

        代碼:

        速記符含義八進(jìn)制方式

        \ a Ctrl-G 鈴聲\ 0 0 7

        \ b Ctrl-H 退格符\ 0 1 0

        \f Ctrl-L 走行換頁(yè)\ 0 1 4

        \n Ctrl-J 新行\(zhòng) 0 1 2

        \ r Ctrl-M 回車(chē)\ 0 1 5

        \t Ctrl-I tab鍵\ 0 11

        \ v Ctrl-X \ 0 3 0

        去除重復(fù)出現(xiàn)的字符

        下面文件包含了一些打印錯(cuò)誤。這種情況時(shí)常發(fā)生,例如在v i編輯器中,偶爾按住一個(gè)鍵不放。

        代碼:

        And the cowwwwws went homeeeeeeeeeeeee

        Or did theyyyyyyyyyyyyy

        如果要去除重復(fù)字母或?qū)⑵鋲嚎s在一起,使用- s選項(xiàng)。因?yàn)槎际亲帜?,故使用[ a - z ][A-Z]。輸入文件重定向到t r命令。

        dtdlut@dtdlut:~$ tr -s "[a-z][A-Z]" < apps.txt

        And the cows went home

        Or did they

        刪除空行

        要?jiǎng)h除空行,可將之剔出文件。下面是一個(gè)文件p l a n e . t x t。文本間有許多空行。

        plane.txt

        9879932 Spitfire

        190992 Lancaster

        238991 Typhoon

        dtdlut@dtdlut:~$ tr -s "\n" < plane.txt

        plane.txt

        9879932 Spitfire

        190992 Lancaster

        238991 Typhoon

        大寫(xiě)到小寫(xiě)

        除了刪除控制字符,轉(zhuǎn)換大小寫(xiě)是t r最常用的功能。為此需指定即將轉(zhuǎn)換的小寫(xiě)字符[ a - z ]和轉(zhuǎn)換結(jié)果[ A - Z ]。

        第一個(gè)例子,t r從一個(gè)包含大小寫(xiě)字母的字符串中接受輸入。

        tr "[a-z]" "[A-Z]" 或者 tr "[:lower:]" "[:upper:]"

        dtdlut@dtdlut:~$ echo "May Day,May Day,Going Down.." | tr "[a-z]" "[A-Z]"

        MAY DAY,MAY DAY,GOING DOWN..

        刪除指定字符

        偶爾會(huì)從下載文件中刪除只包含字母或數(shù)字的列。需要結(jié)合使用- c和- s選項(xiàng)完成此功能。

        下 面的文件包含一個(gè)星期的日程表。任務(wù)是從其中刪除所有數(shù)字,只保留日期。日期有大寫(xiě),也有小寫(xiě)格式。因此需指定兩個(gè)字符范圍[ a - z ]和[ A - Z ],命令tr -cs "[a-z][A-Z]" "\n"將文件每行所有不包含在[ a - z ]或[ A - Z ](所有希臘字母)的字符串放在字符串replace-char-list中并轉(zhuǎn)換為一新行。- s選項(xiàng)表明壓縮所有新行, - c表明取source-char-list的反義。

        dtdlut@dtdlut:~$ cat diray.txt

        mondy 1all0:5b0

        Tuesday 15:00

        wednesday 15:30

        thurday 10:30

        Fridya 09:20

        dtdlut@dtdlut:~$ tr -cs "[a-z][A-Z]" "\n" < diray.txt

        mondy

        all

        b

        Tuesday

        wednesday

        thurday

        Fridya

      3575262