Shell(5)-linux系統bash用法


    本篇博客將介紹linux系統中比較經常使用的 bash 以及用法,例如被稱爲Linux系統中的"三劍客"--grep , sed , awk ; 還有cut ,seq , sort , wc , uniq , diff ,通配符等 .linux

 

     在Linux系統中查找文件通常都會用到通配符 , 管道  , bash技巧命令來輸出咱們想要獲得的結果 , 首先咱們先了解通配符的做用:正則表達式


 一 . 通配符shell


     做用 : 是用來在文件搜索時代替文件名中的一個或多個正真字符 .vim

     經常使用通配符符號有 : ?  *  []bash

     

     ?  做用 : 匹配任意單個字符 .編輯器

     例 : ls  /dev/tty?  , 輸出的結果爲 /dev/tty 加任意一個字符 , 如圖 :ide

     image.png

     再嘗試使用命令 ls /dev/tty?? , 結果爲 : 函數

     image.png


     *  做用 : 匹配任意0個或多個字符 , 意爲全部 ui

     例 : ls  /dev/tty*編碼

     image.png

     同理 , ls  /etc/*.conf , 輸出的結果爲顯示目錄 /etc 下的全部以conf結尾的文件 , 這裏不作嘗試 .


     []  做用 : 匹配[]中的任意單個字符

     例 : ls  /dev/tty[123]5

     image.png

     也能夠連續一個範圍進行匹配 , 如 ls  /dev/tty[1-6]5

     image.png


     管道符 |  :將前一個命令的結果(標準輸出) 傳給後一個命令繼續處理 

     例 : head -6  /etc/passwd  |  cat  -n    #查看文件/etc/passswd的前6行 後, 再用cat查看顯示行號

      image.png

      說明 : 管道符能夠一個接着一個 , 例在上面的例子上再輸出前3行信息

      image.png




 二 . Linux系統三劍客其二(grep , sed )入門 

       

     awk用法見博客 :https://blog.51cto.com/14181896/2359808

     1 . grep : 匹配關鍵字 , 顯示文件中關鍵字所在的整行內容


     例 : grep  root  /etc/passwd         #顯示/etc/passwd文件中所包含root關鍵字的行

     image.png


     經常使用選項 :  -n         顯示行號

                       -i          不區分大小寫

                       -v         取反

                       -c         帶關鍵字的函數

                       -n         靜默執行 , 不在屏幕顯示匹配到的內容 , 一般用於shell腳本

      更多選項用法能夠用 grep  --help 查看用法



     2 . sed流編輯器

          是一種文本編輯器 , 默認狀況下是不會修改原文件的 , 也是一種非交互式的編輯器

          工做原理 : 一行一行處理文件 , 當從文件中讀取一行後 , 首先放到模式空間(內存緩衝區)匹配關鍵字進行相應的處理 , 處理完將結果輸出到屏幕上 , 接着處理下一行內容 , 直到全部行都讀取完畢 , sed 結束 .


     sed的語法 :   sed  [option] '地址命令'  文件名

     經常使用選項 :  -n   靜默輸出 , 關閉模式空間的輸出 , 不會輸出未匹配到的行

                      -e   容許進行多項編輯 , 應用於對同一行作屢次處理 , -e  "命令1"  -e  "命令2" ..-e "命令n"

                      -f    後接sed腳本 , 指定執行的sed腳本

                      -r    容許使用擴展正則

                      -i     直接做用於原文件


     sed 地址定址 :

     定址用於決定對哪些行進行編輯 , 地址形式能夠是數字 , 正則表達式或兩者結合 . 若是沒有指定地址 , sed將處理輸入文件中的全部行 .


     例 : 文件準備 , 將/etc/passwd文件中的前10行內容添加行號覆蓋寫入/pass文件中 , 而後查看/pass文件中的內容

           image.png

           

           輸出單行 :

           sed  -n  '1p'  /pass     #顯示/pass文件中的第一行 ,1p 指print 第1行

           image.png

           同理 , 輸出/pass文件第5行 :

           image.png

         

           輸出指定的多行 : 

           image.png

           指定行數 , 行數號與行數號之間用逗號隔開


           打印從i行開始的後幾行 (i,+n)

           image.png


           打印從第1行開始 , 再加上n行爲止 

           image.png

        

           關鍵字匹配: 處理符合模式(匹配關鍵字)的行 , -r 表示啓用正則表達式

           例 : 顯示/etc/passwd文件中以root開頭的內容

           image.png


    sed的子命令 : 

    sed的子命令告訴sed對指定行進行何種操做 , 包括打印p , 刪除d , 修改(追加a , 插入i , 替換s , 字符替換c)

   

     將/etc/passwd這個文件前10行導入新文件/pass1:   head  /etc/passwd  >  /pass1

           

          d : 刪除(delete)

          sed  '/^root/d'  /pass1     處理/pass1文件顯示刪除以root開頭的行號 

          image.png


          i : (i\text) 在符合模式的行的上面插入(insert)\之後的text文本 , 結果將在終端上顯示 , 默認不會改變原文件

          sed '/^root/i\hello'  /pass1  

          image.png      


          a : (a\text) 在符合模式的行的下面追加\之後的text文本 , 處理結果同 i

          image.png

          結合上面兩個例子 , 使用 -e 選項 同時執行 , 結果如圖所示 :

          image.png


         c : (c\text) 用新文本覆蓋符合模式的行中的文本

         例 : 用 hello world 覆蓋/pass1文件中的第 2 行

         image.png


         s : 用一個字符替換另外一個字符

         例 : sed  's/root/ROOT/g'  /pass1    #指定替換全部匹配到的

         image.png

         sed  's/root/ROOT/2'  /pass1    #指定替換匹配到的的第二個

         image.png




     cut命令 : 提取文件中指定的字段 , 字符內容 . 默認分隔符爲空格

     

     格式 :  cut  [選項]..  [文件]..

     經常使用選項 :  -b   按照字節切 , utf-8編碼中每一個漢字佔三個字節(比如4個漢字就取得12個字節)

                      -c    按照字符切

                      -d    指定分隔符

                      -f     指定以分隔符分割的哪一個字段


     實例 :  將 /etc/passwd 文件中的前5行覆蓋寫入/pass 文件中( head  -5  /etc/passwd  > /pass)

                顯示/pass文件中以 : 分隔的第6行內容 , 家目錄內容:

                image.png

                顯示/pass文件中的第一列(用戶名)和第7列(shell解釋器)的內容:

                image.png

                同理 : cut  -d :  -f  1-3  /pass    取1~3列內容

                以字符大小切 , 例 :echo '×××' | cut  -b  1-12

                image.png

        



     seq : 按順序打印出一些數字 , 例如: 1 2 3 4 5 ...

      

     用法 :  seq  [選項]  ...尾數

               seq  [選項]  ... 首數  尾數

               seq  [選項]  ...首數  增量  尾數


      實例 :  seq  5       #按順序輸出1~5的數

               image.png

               同理 : seq  5~10     #按順序輸出5~10的數    

                         seq  1  2  10    #輸出1~10之間的奇數

                         seq  10  -1  0    #輸入10~0之間的數

               補齊輸出 : -w   例 : seq  -w  1  50  200

               image.png

       擴 : 使用echo命令也能實現seq一樣的效果 , 格式 echo {首數..尾數..增量}


 

     sort排序 : 排序分爲升序 和 降序 , 默認是按升序進行排列


     常見選項 : -n  (--numeric--sort)   根據數值比較 , 默認是按單個字符來比較

                     -r   逆序輸出排序結果

                     -t   指定分割符

                     -k   排序鍵(key , 即排序的列字段)

                     -u   去掉重複行

      實例 : seq 1 10 | sort 

               image.png

               seq  1  10 | sort -n

               image.png

               seq  1  10 | sort - nr

               image.png

               sort  -t :  -k  2  -n  文件名    #按 : 分割開的以第2列是數值大小排序 (使用的最多)

               例 : 按/etc/passwd 文件中第3列uid數值大小進行排列

               image.png


     

     wc : 統計行數 , 單詞數 , 字節數

     例 : wc  /etc/passwd    #在/etc/passwd這個文件中有45行 , 92個單詞數 , 2356個字節

           image.png

           wc  -l    統計行數

           image.png

           wc  -c  統計字節數

           image.png

           wc  -m  統計單詞數

           image.png

           統計 /bin 目錄下有多少個命令

           image.png


         

     uniq : 合併連續重複的行 


     經常使用選項 :  -u    只顯示沒有連續重複的行

                      -c     統計連續重複行的次數

                      -d    只顯示連續重複行一次 , 哪一行連續重複了就顯示哪行

                      -i     忽略大小寫


     例 : 準備一個文件 a.txt , 在文件輸入內容並查看a.txt如圖所示 :

           image.png

           uniq  -c  a.txt     #統計連續出現的次數

           image.png

           uniq  a.txt    #對a.txt 文件中連續重複的行只顯示一次

           image.png

           uniq  -u  a.txt      #不顯示連續重複的行

           image.png

           uniq  -d  a.txt    #僅顯示連續出現的內容一次

           image.png

           結合sort排序使用 , 顯示沒有重複的行

           image.png

 



    diff 命令 : 

    vimdiff  : 比較兩個文件的差別

     

     實例 : 準備兩個存在差別的文件 : 

              head  -3  /etc/passwd  >  /tmp/pass3

              head  -5  /etc/passswd > /tmp/pass5

               準備好上面兩個文件以後 ,先使用vimdiff 對比/pass3 和 /pass5的文件內容 , 再用diff命令對比兩個文件的差別 , 將顯示出兩個文件不一樣內容:

               image.png

               image.png

               

               經過顯示差別 , 能夠製做補丁 : 

               diff  /pass3  /pass5  >  /pass35.patch   #製做補丁文件/pass35.patch(增長內容) 並查看此文件 :

               diff  /pass5  /pass3  >  /pass53.pattch   #製做補丁文件/pass53.patch(減小內容)

               image.png

               

               patch 打補丁 : 

               首先安裝patch -- yum  install  -y  patch ,而後給/pass3 文件打補丁 , 最後查看/pass3文件內容 :

               image.png

               同理 patch  /pass3  /pass53.patch  會減小/pass3的最後兩行



    tr : 替換字符 , 被替換的字符與替換的字符數必須是相等的

    用法 : tr   舊字符   新字符


    實例 : 準備一個文件 b.txt , 內容如圖 :

             image.png

              

             cat  b.txt | tr  20  89     #將cat  b.txt 結果中的20 替換成了 89(不改變原文件)

             image.png

             cat  a.txt | tr  "a-z" "A-Z"   #替換時一一替換 , 字母變成大寫

             image.png

  



      以上都是比較常見的 bash 和 它們的用法 , 下一篇再介紹 awk 的簡介做用以及它的入門操做          

相關文章
相關標籤/搜索