shell腳本學習筆記之文本處理命令

shell腳本學習筆記之文本處理命令



一.cut (截取文本字符或域字段)
   命令格式:cut [option] file
  1.-d和-f的組合用法,用來截取字段
     說明:*表示分隔符,如-,:,空格字符等
           N表示第N個字段
   用法一:cut -d* -fN       從文本中截取每行以某個特定符號爲分隔符的某個域字段
     例子:cut -d:-f1       從文本中截取每行以冒號(:)爲分隔符的第一個域字段


   用法二:cut -d* -fNm-n    從文本中截取每行相鄰的多個域字段
     例子:cut -d:-f1-3     從文本中截取每行以冒號(:)爲分隔符的多個域字段


   用法三:cut -d* -fNm,n    從文本中截取每行不相鄰的多個域字段
     例子:cut -d: -f1,3     從文本中截取每行的第一個到第三個字符


  2.-c用法     用來截取字符  
   用法一:cut -cN           從文本中截取一個字符
     例子:cut -c1           從文本中截取每行的第一個字符


   用法二:cut -cNm-n        從文本中截取每行相鄰的多個字符多個字符
     例子:cut -c1-5         從文本中截取每行的第一個到第五個字符
 
   用法三:cut -cNm,n        從文本中截取每行不相鄰的多個字符
     例子:cut -c1,5         從文本中截取每行字符中的第一個和第五個字符


***  注意:
        1.cut命令只能截取單個文件中的字符或域字段
        2.cut命令截取的字符或域字段是從所有行中截取的以列的形式顯示到屏幕,而不是從某行或某些行中截取,也就是說cut命令不具備截取特定行特定字符或特定行特定域字段,只能從文本中所有行中截取,一般cut命令是針對具有某種排列次序的文本來使用的文本處理命令。


___________________________________________________________________________
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



二.uniq (去除文本中的重複行)
   命令格式:uniq [option] file
  1.uniq -c  顯示文本中相同行連續重複的次數        
  例子1:[root@node1 tmp]# uniq -c job
      2 ggg
      2 jjjjjjjjjjjj
 
  例子2:[root@node1 tmp]# uniq -c job
      2 ggg
      2 jjjjjjjjjjjj
      1 ggg
      1 jjj
 
  2.uniq -d   顯示文本中重複的行(只顯示一次)
  例子:       [root@node1 tmp]# uniq -d job
        ggg
        jjjjjjjjjjjj


  3.uniq -u   顯示文本中沒有連續重複的行
  例子:       [root@node1 tmp]# uniq -u job
        ggg
        jjj


***注意:
       這裏要着重理解連續重複和重複所代表不同意義



_______________________________________________________________________
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


三.paste(將不同文本中的數據合到新的文本)
   命令格式:paste [option] file1 file2


   1.paste file1 file2  將file1文本中的內容和file2文本中的內容顯示爲一個文本,同時將file1的內容作爲第一個域字段,分隔符爲tab(n個空格) 而file1作爲第二個域字段顯示,反之一樣
 例子:  [root@node1 test]# paste passwd shadow
1.root:x:0:0:root:/root:/bin/bash root:$1$sovZvvQl$8HOSTtnMubbEdswFA3lnI/:16393:0:99999:7:::
bin:x:1:1:bin:/bin:/sbin/nologin bin:*:16393:0:99999:7:::
2.daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:*:16393:0:99999:7:::
3.adm:x:3:4:adm:/var/adm:/sbin/nologin adm:*:16393:0:99999:7:::
4.lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin lp:*:16393:0:99999:7:::
5.sync:x:5:0:sync:/sbin:/bin/sync sync:*:16393:0:99999:7:::
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown shutdown:*:16393:0:99999:7:::
6.halt:x:7:0:halt:/sbin:/sbin/halt halt:*:16393:0:99999:7:::
 


  2.paste -d* file1 file2  使用*(*可以爲:或-或其他字符)爲分隔符顯示file1和file2組合後的新文本
  例子:[root@node1 tmp]# paste -d- a b
jjj-kkk


  3.paste -s file file2    將file1文本和file2文本以橫向放入同一個文本中,也就是說先放file1文本,然後在下一行放                            file2文本,也就說新的文本只有兩行,即file1爲一行,file2爲另一行


  4.paste -d* -s file file2  將file1文本和file2文本中本來不同行使用*分隔符區分,也就是說,原來的文本的每行內容之前用*分隔符作爲域字段區分,而文本之間則以行區分。
  例子:[root@node1 tmp]# cat m n
a
b
c


o
p
q
  [root@node1 tmp]# paste -d: -s m n
a:b:c:
o:p:q


 5.ls | paste -d“ ” - - -  
 例子:[root@node1 tmp]# ls | paste -d" " - - - - -  -選項必須和ls及|結合使用
a b job m n
test tom  


***注意:paste命令需要理解橫行,豎行,字段的轉變



____________________________________________________________________________________
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



四、cat(一次性顯示文本所有內容)
   cat [option] filename
   1.cat -A filename    顯示文本所有內容
    
   2.cat -b filename    將文本中的行用編號進行排序顯示(空白行不編號)
    
   3.cat -E filename    在文本的每行末尾顯示$符號


   4.cat -n filename    將文本中的行用編號進行排序


   5.cat -s filename    將文本中連續的多個空白行顯示爲一個空白行


   6.cat -v filename    將文本中不可顯示的字符(如製表符,新行符合換行符除外)顯示出來



____________________________________________________________________________
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



五,more(以屏幕爲單位逐屏顯示文本內容)
    more [option] filename


    1.more -N filename   一次顯示N行內容至屏幕


    2.more -d  filename  用於提示使用者如何逐屏查看文本內容和如何退出查看


    3.more -f filename   計算行數時,以實際行計數,而不是自動換行後的計數


    4.more -p filename   不以逐屏形式顯示文本內容,而是先清除屏幕顯示的文本內容,再顯示其他內容


    5.more -c filename   先顯示內容,再清除屏幕
   
    6.more -s filename  將多行空白行以一行計數


    7.more +/ filename  通過搜索字符串來開始顯示字符串後所有內容


    8.more +n filename  通第n行開始顯示文本內容


_______________________________________________________________________________
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


六、head
   head [option] filename
   1.head -N file     N表示查看文本前N行
例子
     head -8 file     查看文本前8行


++++++++++++++++++++++++++++++++++++++++++++++++++++++



七.tail
   tail  [option] filename
   1.tail -N file    N表示查看文本後N行
例子
    tail -8 file     查看文本後8行


+++++++++++++++++++++++++++++++++++++++++++++++++++++++


八.less
  less file  逐屏查看文本內容
  






+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


九.split  ----將一個大文件切割成多個小文件,並在小文件中自動編號
split [option] 帶切割的大文件 輸出的小文件


選項
-或-l 這兩個選項等價,都用於指導切割成小文件行數
-b    指導切割成小文件的字節
-C    與-b選項類似,不過,切割時儘量維持每行的完整性


例子
split -2 file    將文本按每兩行生成一個文件


split -b50 file    將文件以50個字節爲一個文件進行分割


split -C50 file      在以文本內容記錄完整性爲前提下,進量保證以50字節爲爲一個文件                      個文件進行分割



++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



十.join  ----用於實現將兩個文件中具有相同域的記錄選擇出來的連接操作


選項
-a1或-a2  除了顯示以共同域進行連接的結果外,-a1表示還顯示第二個文件中沒有共同域的記錄
-i        比較域內容時,忽略大小寫差異
-o        設置結果顯示的格式
-t        改變域分隔符
-v1或-v2   與-a選項類似,但是不顯示以共同域進行連接的結果
-1和-2    -1用於設置文件1用於鏈接的域,-2用於設置文件2用於連接的域


語法:join [選項] 文件1 文件2


1.-a和-v選項


例子
join -t:  file1 file2  只顯示file1和file2中可以連接的行
join -t: -a1 file1 file2   除了顯示可以連接的行,還顯示file1的所有未連接的文件
join -t:  -a2 file1 file2   除了顯示可以連接的行,還顯示file2的所有未倆件的文件
join -t: -v1 file1 file2   只顯示file1中未連接的行
join -t: -v2 file1 file2   只顯示file2中未連接的行


2.-o選項  ---用於改變結果顯示的格式


例子
join -t: -o11.1 2.2 .12 file1 file2
 顯示的格式爲依次顯示第1個文件中的第一個域、第2個文件的第2個域、第1個文件的第2個域



3.-1和-2選項  用於設置文件所鏈接的域


例子
join -t: -i -1 3 -2 1 file1 file2
以文件1的第3域和文件2的第1域進行連接,並忽略大小寫







++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



十一、tr (用於字符轉換)
   tr [選項] 字符串1 字符串2 <filename
              
選項
 -c 選定字符串1中字符集的補集,即反選字符串1中的字符集
 -d 刪除字符串1中出現的所有字符
 -s 刪除所有重複出現的字符序列,只保留一個 



1.tr -d  字符 <filename  刪除文本中的字符
例子
tr -d A-Z <filename  刪除文本中所有的大寫字母
tr -d "[\n]" <filename  刪除文本中所有的換行符


tr支持的控制字符
\a    ctrl+G 鈴聲        \007
\b    ctrl+H 退格符       \010
\f    ctrl+L 走行換頁      \014
\n    ctrl+J 換行符         \012
\r    ctrl+M 回車鍵          \015
\t    ctrl+I Tab鍵            \011


2.-s   --刪除所有重複出現的字符序列,只保留一個
例子
tr -s "[\n]" <filename   將重複出現的換行符壓縮成一個
tr -s "[a-z],[A-Z]" <filename   將所有重複字母壓縮成一個



3.替換
 tr "[a-z]" "[A-Z]" <filename 將小寫字符替換爲大小字母
 tr "[:lower:]" "[:upper:]" < filename 字符集表示法



4.-c  ---選定字符串1中字符集的補集
tr -cs "[a-z][A-Z]" "{\012*} <filename
將不在“[a-z][A-Z]"字符集內的字符替換爲換行符,並將重複的出現的換行符壓縮爲一個


tr "[o*5]" "*"<filename 將文本連續出現5次的o改爲*字符



++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


十二、sort


格式:sort [選項] [輸入文件]


選項
-c         測試文件是否已經被排列
-k         指定排序的域
-m         合併兩個已排序的文件
-n         更加數字大小進行排序
-o[輸入文件]  將輸出寫到指定的文件,相當於將輸出重定向到指定文件
-r         將排序結果逆向顯示
-t         改變域分隔符
-u         去除結果中的重複行



1.-t選項   --用於設置分隔符
例子:
sort -t: -k3 filename  根據第三域對文本排序


2.-k選項   ---指定按某個域進行排序
例子
   sort -t: -k3 filename  根據第三域對filename排序(字符串方式排序)




3.-n選項   ---指定根據數字大小進行排序
例子:
   sort -t: -k3n filename  根據第三域的數字由小到大排序


4.-r選項     ---用於將排序結果逆向顯示
例子:
    sort -t: -k3nr filename  將第三域按數字由大到小排序


5.-u選項    ---去除排序結果中的重複行


例子:
   sort -t: -u filename   利用-u去除文本中的重複行


6.-o選項   --將輸出到屏幕的文件另存爲
例子:
    sort -t: -k3n -o input file  將按要求排好序的文本input另存爲file


     
7.-c選項     ---用於測試文件是否已經排好序
sort  -t: -c filename   測試filename是否按默認方式排序


sort -t: -k3n -c filename  測試filename是否按第三域的數值大小排序


8.-m選項  ---將兩個排好序的文件合併成一個好、排好序的文件


sort -t: -m file1 file2  合併file1和file2


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章