1. gzyueqian
      13352868059

      java大數(shù)據(jù)幫你把shell-tr命令詳解-粵嵌培訓(xùn)

      更新時(shí)間: 2018-09-07 11:11:08來源: java培訓(xùn)瀏覽量:6604

          關(guān)于tr
          t r用來從標(biāo)準(zhǔn)輸入中通過替換或刪除操作進(jìn)行字符轉(zhuǎn)換。t r主要用于刪除文件中控制字符或進(jìn)行字符轉(zhuǎn)換。使用t r時(shí)要轉(zhuǎn)換兩個(gè)字符串:字符串1用于查詢,字符串2用于處理各種轉(zhuǎn)換。
          t r剛執(zhí)行時(shí),字符串1中的字符被映射到字符串2中的字符,然后轉(zhuǎn)換操作開始。

          一、下面講述:

          1、大小寫轉(zhuǎn)換。
          2、去除控制字符。
          3、刪除空行。

          帶有常用選項(xiàng)的t r命令格式為:


      [cpp] view plain copy
      t r - c - d - s [ " s t r i n g 1 _ t o _ t r a n s l a t e _ f r o m " ]   
      [ " s t r i n g 2 _ t o _ t r a n s l a t e _ t o " ] i n p u t _f i l e  

          這里:
          -c 用字符串1中字符集的補(bǔ)集替換此字符集,要求字符集為A S C I I。
          -d 刪除字符串1中所有輸入字符。
          -s 刪除所有重復(fù)出現(xiàn)字符序列,只保留個(gè);即將重復(fù)出現(xiàn)字符串壓縮為一個(gè)字符串。
          I n p u t - f i l e是轉(zhuǎn)換文件名。雖然可以使用其他格式輸入,但這種格式常用。
          字符范圍
          使用t r時(shí),可以指定字符串列表或范圍作為形成字符串的模式。這看起來很像正則表達(dá)式,但實(shí)際上不是。指定字符串1或字符串2的內(nèi)容時(shí),只能使用單字符或字符串范圍或列表。
          [a-z] a-z內(nèi)的字符組成的字符串。
          [A-Z] A-Z內(nèi)的字符組成的字符串。
          [0-9] 數(shù)字串。
          /octal 一個(gè)三位的八進(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鍵、空格、點(diǎn)記符、圖形等等。
          下表包括常用的控制字符的速記方式及三位八進(jìn)制引用方式。
          當(dāng)用一個(gè)單字符替換一個(gè)字符串或字符范圍時(shí),注意字符并不放在方括號里( [ ])。一些系統(tǒng)也可以使用方括號,例如可以寫成[“ 0 1 2”]或“ 0 1 2”,t r也允許不加引號,因此命令中看到單引號而不是雙引號時(shí)也不要感到奇怪。
          像大多數(shù)系統(tǒng)工具一樣, t r也受特定字符的影響。因此如果要匹配這些字符,需使用反斜線屏蔽其特殊含義。例如,用 {指定花括號左邊可以屏蔽其特殊含義。

          tr中特定控制字符的不同表達(dá)方式


          [cpp] view plain copy
          速記符含義八進(jìn)制方式  
           a Ctrl-G 鈴聲 0 0 7  
           b Ctrl-H 退格符 0 1 0  
          f Ctrl-L 走行換頁 0 1 4  
          n Ctrl-J 新行 0 1 2  
           r Ctrl-M 回車 0 1 5  
          t Ctrl-I tab鍵 0 11  
           v Ctrl-X 0 3 0  
          去除重復(fù)出現(xiàn)的字符

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


          [cpp] view plain copy
          [sam@chenwy split]$ cat opps.txt  
          And the cowwwwws went homeeeeeeeeeeeee  
          Or did theyyyyyyyyyyyyy  

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


          [cpp] view plain copy
          [sam@chenwy split]$ tr -s "[a-z]" < opps.txt  
          And the cows went home  
          Or did they  

          所有重復(fù)字符被壓縮成一個(gè)。如果使用c a t命令,再將結(jié)果管道輸出至t r,結(jié)果是一樣的。


          [cpp] view plain copy
          [sam@chenwy split]$ cat opps.txt | tr -s "[a-z]"  
          And the cows went home  
          Or did they  
          刪除空行

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


          [cpp] view plain copy
          [sam@chenwy split]$ cat plane.txt  
          plane.txt  
          9879932 Spitfire  
          190992 Lancaster  
          238991 Typhoon

          使用- s來做這項(xiàng)工作。換行的八進(jìn)制表示為 0 1 2,命令為:


       [cpp] view plain copy
          [sam@chenwy split]$ tr -s "[12]" < plane.txt  
          plane.txt  
          9879932 Spitfire  
          190992 Lancaster  
          238991 Typhoon  
          也可以使用換行速記方式 n。
          [cpp] view plain copy
          [sam@chenwy split]$ 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 ]。

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


          [cpp] view plain copy
          [sam@chenwy split]$ echo "May Day,May Day,Going Down.." | tr "[a-z]" "[A-Z]"  
          MAY DAY,MAY DAY,GOING DOWN..  
          同樣,也可以使用字符類[:l o w e r:]和[:u p p e r:]。
          [cpp] view plain copy
          [sam@chenwy split]$ echo "May Day,May Day,Going Down.." | tr "[:lower:]" "[:upper:]"  
          MAY DAY,MAY DAY,GOING DOWN..  

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

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


          [cpp] view plain copy
          [sam@chenwy split]$ cat diary.txt  
          mondy 10:50  
          Tuesday 15:00  
          wednesday 15:30  
          thurday 10:30  
          Fridya 09:20  
          [cpp] view plain copy
          [sam@chenwy split]$ tr -cs "[a-z][A-Z]" "[12*]" <diary.txt  
          mondy  
          Tuesday  
          wednesday  
          thurday  
          Fridya  

          轉(zhuǎn)換控制字符
          t r的個(gè)功能就是轉(zhuǎn)換控制字符,特別是從d o s向U N I X下載文件時(shí),忘記設(shè)置f t p關(guān)于回車換行轉(zhuǎn)換的選項(xiàng)時(shí)更是如此。

          下面是故意沒有設(shè)置轉(zhuǎn)換開關(guān)的一個(gè)文本文件,是關(guān)于文具需求的一部分內(nèi)容。使用c a t- v顯示控制字符。


          [cpp] view plain copy
          [sam@chenwy split]$ cat -v stat.tr  
          Boxes paper     12^M  
          Clips metal     50^M  
          Pencils-meduim  10^M  
          ^Z  

          猜想‘中間空的是’是t a b鍵。每一行以C t r l - M結(jié)尾,文件結(jié)尾C t r l - Z,以下是改動(dòng)方法。
          使用- s選項(xiàng),查看A S C I I表。^的八進(jìn)制代碼是1 3 6,^ M是0 1 5,t a b鍵是0 11,^ Z是0 3 2 ,下面將按步驟完成終功能。

          用新行替換每行末尾的^ M,并用 n去除^ Z,輸入要來自于臨時(shí)工作文件s t a t . t m p。將結(jié)果重定向到臨時(shí)工作文件s t a t . t m p。


          [cpp] view plain copy
          [sam@chenwy split]$ tr -s "[1532]" "n" <stat.tr >stam.tmp  
          [sam@chenwy split]$ cat -v stam.tmp  
          Boxes paper     12  
          Clips metal     50  
          Pencils-meduim  10  

          快速轉(zhuǎn)換

          如果需要?jiǎng)h除文件中^ M,并代之以換行。使用命令:


          [cpp] view plain copy
          [sam@chenwy split]$ tr -s "[15]" "n" < stat.tr |cat -v  
          Boxes paper     12  
          Clips metal     50  
          Pencils-meduim  10  
          ^Z  

          或者用下述命令得同樣結(jié)果。


          [cpp] view plain copy
          [sam@chenwy split]$ tr -s "[15]" "n" < stat.tr >stat1.tr  
          [sam@chenwy split]$ cat stat1.tr  
          Boxes paper     12  
          Clips metal     50  
          Pencils-meduim  10  
          也可以用下述命令:
          [cpp] view plain copy
          [sam@chenwy split]$ tr -s "[r]" "n" < stat.tr  
          [cpp] view plain copy
          [sam@chenwy split]$ tr -s "r" "n" < stat.tr  
          另一個(gè)一般的D o s到U N I X轉(zhuǎn)換是命令:
          [cpp] view plain copy
          [sam@chenwy split]$ tr -s "[1532]" "[12*]" < stat.tr   
          Boxes paper     12  
          Clips metal     50  
          Pencils-meduim  10  
          將刪除所有^ M和^ Z,代之以換行。
          要?jiǎng)h除所有的t a b鍵,代之以空格,使用命令:
          [cpp] view plain copy
          [sam@chenwy split]$ tr -s "[11]" "[40*]" < stat.tr >temp.txt  
          [sam@chenwy split]$cat -v temp.txt  
          Boxes paper 12^M  
          Clips metal 50^M  
          Pencils-meduim 10^M  
          ^Z  

          替換p a s s w d文件中所有冒號,代之以t a b鍵,可以增加可讀性。將冒號引起來,指定替換字符串中t a b鍵八進(jìn)制值0 11,下面是p a s s w d文件,后跟t r命令結(jié)果:


          [cpp] view plain copy
          [sam@chenwy split]$ tr -s "[:]" "[t]" < passwd  
          root    x       0       0       root    /root   /bin/bash  
          bin     x       1       1       bin     /bin    /sbin/nologin  
          daemon  x       2       2       daemon  /sbin   /sbin/nologin  
          .....................  

          或
          [cpp] view plain copy
          [sam@chenwy split]$ tr -s "[:]" "[11]" < passwd  

          匹配多于一個(gè)字符
          可以使用[ c h a r a c t e r * n ]格式匹配多于一個(gè)字符。下述文件列出系統(tǒng)硬盤信息,其中包含了系統(tǒng)已經(jīng)注冊的和未識別的。列是數(shù)字,如果不全是0,表明第二列相應(yīng)硬盤已經(jīng)注冊。

          有時(shí)全部為0看起來很煩人,找個(gè)吸引人注意力的符號來代替它,以便一眼就能看出哪個(gè)硬盤已注冊,哪個(gè)不可識別。原文件如下:


          [cpp] view plain copy
          [sam@chenwy split]$ cat hdisk.txt  
          15566 hdisk3  
          456554 hdisk2  
          0000 hdisk1  

          從文件列表中知道,有一個(gè)硬盤未注冊,因此用星號代替所有的0。模式為[ 0 * 4 ],意即匹配至少4個(gè)0,替換字符串為星號,過濾命令及結(jié)果如下:
          [cpp] view plain copy
          [sam@chenwy split]$ tr "[0*4]" "*" < hdisk.txt  
          15566 hdisk3  
          456554 hdisk2  
          **** hdisk1  

          但我發(fā)現(xiàn)加上[]后結(jié)果不對了


          [cpp] view plain copy
          [sam@chenwy split]$ tr "[0*4]" "[*]" < hdisk.txt  
          15566 hdisk3  
          456554 hdisk2  
          ]]]] hdisk1  
          粵嵌科技創(chuàng)辦于2005年是一家IT高新技術(shù)企業(yè),專注IT職業(yè)教育13年,主要培訓(xùn)課程分別有嵌入式培訓(xùn)、Java培訓(xùn)、Unity游戲開發(fā)、Python人工智能、HTML5前端開發(fā)、全棧UI設(shè)計(jì)、網(wǎng)絡(luò)營銷、CCIE網(wǎng)絡(luò)等專業(yè)課程。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日韩无砖专区中文字幕 | 日本精品中文字幕在线不卡 | 色偷偷8888欧美精品久久 | 一本久久a精品一区二区 | 在线精品亚洲精品 | 伊人久久大香线蕉亚洲五月天色悠 |