国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

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

    linux shell tr命令詳解

    時間: 佳洲1085 分享

    linux shell tr命令詳解

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

      linux shell tr命令

      tr是translate的簡寫,亦即翻譯,但是遺憾的是,它不能翻譯句子,只能翻譯單個字符。

      1 工作原理

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

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

      2 例子

      tr的例子其實都大同小異,看一個最簡單的例子:

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

      [rocrocket@rocrocket programming]$ cat height.txt

      1.79 1.83

      1.65 1.59

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

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

      2.79 2.83

      2.65 2.59

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

      3 用tr來修改文件中的間隔符

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

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

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

      1.79 1.83

      1.65 1.59

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

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

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

      1.79\t1.83$

      1.65\t1.59$

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

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

      這個正是tr所擅長的地方。

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

      那么最簡單的替換大小寫的方法是:

      [rocrocket@rocrocket programming]$ cat word.txt

      AbcdE

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

      ABCDE

      5 [CHAR*]

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

      例子:

      [rocrocket@rocrocket programming]$ cat number.txt

      1234567890

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

      AAAAA67890

      6 [CHAR*REPEAT]

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

      例子:

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

      AAAAABCDE0

      7 在tr中表示集合的符號

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

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

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

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

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

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

      [:lower:] :所有小寫字母

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

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

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

      [:upper:] :所有大寫字母

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

      例子:

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

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

      xxxxxxxxxx

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

      這個問題,最好的解決辦法就是做實驗啊。

      第一種情況是SET1>SET2:

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

      ABBBB67890

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

      第二種情況SET1

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

      ABC4567890

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

      9 tr命令的-s選項

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

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

      [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選項

      -d選項是用來刪除字符用的。格式是這樣的:tr -d charset

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

      Howareyou?

      Fine!Thankyou!

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

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

      語法:

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

      用途:

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

      常用選項:

      -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里所列的字符,則將其濃縮成一個?;蛘邔⑵錆饪s成replace-char-list中的字符。

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

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

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

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

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

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

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

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

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

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

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

      大部分t r變種支持字符類和速記控制字符。

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

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

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

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

      代碼:

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

      \ a Ctrl-G 鈴聲\ 0 0 7

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

      \f Ctrl-L 走行換頁\ 0 1 4

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

      \ r Ctrl-M 回車\ 0 1 5

      \t Ctrl-I tab鍵\ 0 11

      \ v Ctrl-X \ 0 3 0

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

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

      代碼:

      And the cowwwwws went homeeeeeeeeeeeee

      Or did theyyyyyyyyyyyyy

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

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

      And the cows went home

      Or did they

      刪除空行

      要刪除空行,可將之剔出文件。下面是一個文件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

      大寫到小寫

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

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

      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..

      刪除指定字符

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

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