linux上的文本三劍客之grep和文本查看工具

linux上文本處理三劍客

grep,egrep,fgrep:文本過濾工具(模式:pattern)工具:

    grep:基本正則表達式,-E:支持擴展正則表達式,-F:不支持正則表達式

    egrep:擴展正則表達式,-G:支持基本正則表達式 ,-F:不支持正則表達式

    fgrep:不支持正則表達式,-E.-G

    sed:stream editor,流編輯器;文本編輯工具

    awk:linux實現為gawk,文本報告生成器(格式化文本);

  正則表達式:(regual expression,REGEXP)由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示其字面意義,

  而是用于表示控制或通配的功能;主要分兩類:

    基本正則表達式:BRE

    擴展正則表達式:ERE

     元字符:什么是元字符呢,這個像天書一樣的東西就是元字符–>\(hello[[:space:]]\+\)\+

  grep:

    作用:文本搜索工具,根據用戶指定的“模式(過濾條件)”對目標文本逐行進行匹配檢測;打印匹配到的行;

     模式:由正則表達式的元字符及文本字符所編寫出的過濾條件

    grep

        grep [OPTIONS] PATTERN [FILE…]

          grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

           –color=auto:自動對匹配到的文本做著色,高亮顯示

           -i:ignorecase:忽略字符大小寫

           -o:僅顯示匹配到的字符串本身;

           -v:顯示不能被模式匹配到的行

           -E:支持使用擴展的則表達式元子符

           -q:–quiet, –silent:靜默模式,既不輸出任何信息;

           -A:后#行

           -B:前#行

           -C:前后各#行

    基本正則表達式元字符

     字符匹配:

        .:匹配任意單個字符

       []:匹配指定范圍內的任意單個字符

       [^]:匹配指定范圍外的任意單個字符

        [:digit:]數字

       [:lower:]小寫字母

       [:upper:]大寫字母

        [:alpha:]所有大小寫字母

        [:alnum:]所有字母和數字

        [:punct:]所有標點符號

        [:space:]所有空白字符

      匹配次數:用在要指定其出現的次數的字符的后面,用于限制其前面字符出現的次數;默認工作于貪婪模式

        *:匹配其前面的字符任意次;0;1;多次

        .*:匹配任意長度的任意字符

        \?:匹配其前面的字符0次或1次,即其前面的字符可有可無

        \+:匹配其前面的字符1次或多次,即其前面的字符要出現至少1次

        \{m\}:匹配其前面的字符m(指精確數字)次;

        \{m,n\}:匹配其前面的字符至少m次,至多n次;

        \{0,n\}至多n次

        \{m,\}至少m次

     位置錨定:

        ^:行首錨定;用于模式的最左側

        $:行尾錨定;用于模式的最右側

        ^PATTERN$:用PATTERN來匹配整行

        ^$:空白行

        ^[[:space:]*]$:空行或包含空白字符的行

     單詞錨定(單詞:非特殊字符組成的連續字符(字符串)都稱為單詞)      

        \<或\b:詞首錨定,用于單詞模式的左側

        \>或\b:詞尾錨定,用于單詞模式的右側

        \<PATTERN\>:匹配完整單詞;

    分組及引用

        \(\):將一個或多個字符捆綁在一起,當成一個整體進行處理,如: \(xy\)*ab      

      分組:括號中的模式匹配到的內容會被正則表達式引擎自動記錄于內部的變量中,這些變量為:

        \1:模式從左側起,第一個左括號以及與之匹配到的右括號之間的模式所匹配到的字符;

        \2:模式從左側起,第二個左括號以及與之匹配到的右括號之間的模式所匹配到的字符;

        \3:模式從左側起,第三個左括號以及與之匹配到的右括號之間的模式所匹配到的字符;        

        ]#:grep "\(l..e\).*\1" lovers.txt

      后向引用:引用前面的分組括號中的模式所匹配到的字符

    egrep:支持擴展正則表達式實現類似與grep文本過濾功能;grep -E

       grep [OPTIONS] PATTERN [FILE…]

          –color=auto:自動對匹配到的文本做著色,高亮顯示

          -i:ignorecase:忽略字符大小寫

          -o:僅顯示匹配到的字符串本身;

          -v:顯示不能被模式匹配到的行

          -E:支持使用擴展的則表達式元子符

          -q:–quiet, –silent:靜默模式,既不輸出任何信息;

           -A:后#行

           -B:前#行

           -C:前后各#行

           -G: 表示支持基本正則表達式

      擴展正則表達式的元字符

        字符匹配

          .:任意單個字符

          []:指定范圍內的任意單個字符

          [^]:指定任意范圍外的任意單個字符

         [:digit:]數字

        [:lower:]小寫字母

        [:upper:]大寫字母

        [:alpha:]所有大小寫字母

        [:alnum:]所有字母和數字

        [:punct:]所有標點符號

        [:space:]所有空白字符

        次數匹配

          *:任意次,0,1或多次

           ?: 0次或1次;表示其前的字符可有可無

           +:其前字符至少1次;表示一次或多次

           {m}:其前的字符m次

           {m,n}:至少m次,至多n次

           {0,n}:至多n次

           {m,}:至少m次

        位置錨定:

           ^:行首錨定

           $:行尾錨定

           \<或者\b:詞首錨定

           \>或者\b:詞尾錨定

        分組及引用

          ():分組;括號內的模式匹配到的字符會被記錄于正則表達式引擎內部的變量中;

           后向引用:\1,\2,…

          或:

           a|b:a或者b;整個左側或者右側

           C|cat:C或者cat

           (c|C)at:cat或者cat

文本查看工具

    cat:more: less:head:tail:

    cat:

         -n:加行號

         -b:空行不加行號

         -ns:把壓縮重復的空行僅僅顯示一行

         -v:顯示windows的^M號

         -t:顯示tab符

    tac:和cat相反顯示

    rev:反向顯示每一個行的每個字符

    more:分頁顯示,less更便捷

    less:可以一頁頁的翻,上下都可以,也可以搜索關鍵字

         -/關鍵字:搜索關鍵字

         n/N:向下和向上搜索

         ?。褐С謘hell命令,可以在輸入!后輸入shell命令

    head:顯示頭10行(默認)

         -n#:-n3(顯示前3行

    tail:顯示后10行(默認)

        -n#:-n3(顯示后3行)用來看日志用到比較多

        -c#(-c10)只顯示最后的10個字節

         -f:不會在顯示信息之后自動退出, 跟蹤顯示文件新追加的內容,常用日志監控

            tail -f /var/log/messages

              tail -n0 -f /var/log/messages &

            此命令只顯示新的日志信息,而且還可以繼續操作其他命令

              必須使用fg 1 ctrl+c 才能終止后臺

文本處理工具

   wc,cut,sort,uniq,diff,patch

    wc:word count:單詞統計

      -l:僅顯示行數

      -w:僅顯示單詞數

      -c:僅顯示字節數

       -m:僅僅顯示字符數

    示例

    [root@ali ~]# netstat -nt(此命令顯示當前系統的網絡鏈接狀態,可以結合wc命令得出行數,單詞數,字節數)

    Active Internet connections (w/o servers)

    Proto Recv-Q Send-Q Local Address               Foreign Address             State

    tcp        0      0 10.1.253.109:22             10.1.250.14:51155           ESTABLISHED

    [root@ali ~]# netstat -nt |wc

      3      19     219   (左側3表示行數,19表示單詞數,219表示字節數)

    cut:以列切割

      -d CHAR:以指定的字符為分隔符

      -f FIELDS:挑選出的字段

      #:指定的單個字段

      #-#:連續的多個字段

      #,#:離散的多個字段

    示例(1)

    [root@ali ~]# cat /etc/passwd | cut -d: -f1,3,7

    root:0:/bin/bash

    bin:1:/sbin/nologin

    命令解析:cat /etc/passwd 然后通過管道給cut -d: -f1,3,7:以冒號為分割符,列出第1,3,7列    

    示例(2)

    [root@ali ~]# ifconfig |cut -d: -f2 |cut -d' ' -f1 |head -2 |tail -1

    10.1.253.109

    命令解析:使用cut和head,tail結合取出ifconfig中的ip地址

    paste 合并兩個文件同行號的列到一行

      -d分隔符:指定分隔符,默認TAB

      -s:所有行合并成一行顯示

      paste f1 f2

      paste -s f1 f2

    sort:排序

      -n:基于數值大小排序,而非字符進行排序

      -t CHAR:指定分隔符

      -k #:用于排序比較的字段

      -r:逆序排序

      -f:忽略字符大小寫

      -u:重復的行只保留一份;

      uniq:報告和移除重復的行

      -c:顯示每行的重復次數

      -u: 僅顯示未曾重復過的行

      -d: 僅顯示重復過的行

    示例

    cat /etc/init.d/functions |tr -cs '[[:alpha:]]' '\n' |uniq -cd

    命令解析:cat查看文件管道給tr -cs把所有字母以外的全部替換成換行,然后給uniq -cd

    僅僅顯示重復過的行和重復的次數,找出/etc/init.d/functions每個單詞重復的次數。

    diff:找出兩個文件的不同點,并且生成補丁

    diff [選項] 源文件 目標文件

    生成補丁

    diff/path/to/oldfile /path/to/newfile > /path/to/patch_file

      -u:使用unfied機制,即顯示要修改的行的上下文,默認認為3行,可以使用-c定義為多少行

    示例:顯示出了不同行的上下各3行

    [root@ali ~]# diff -u f1 f1.new

    — f1 2016-08-04 07:01:29.302813685 +0800

    +++ f1.new 2016-08-04 07:02:10.501812744 +0800

    @@ -1,6 +1,6 @@

    Filesystem     1K-blocks    Used Available Use% Mounted on

    /dev/sda2       82438832 3739076  74505452   5% /

    -tmpfs             502068     224    501844   1% /dev/shm

    +tmpfs i am fi.new            502068     224    501844   1% /dev/shm

    /dev/sda1         194241   34079    149922  19% /boot

    /dev/sda3       20027260   45504  18957756   1% /testdir

    /dev/sr0         3824484 3824484         0 100% /media/CentOS_6.8_Final

    patch:向文件打補丁

    patch[options] -i /path/to/patch_file  /path/to/oldfile

    也可以是使用輸入重定向方法

    patch/path/to/oldfile < /path/to/path_file


原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/29821

(0)
M20-1馬星M20-1馬星
上一篇 2016-08-07
下一篇 2016-08-07

相關推薦

  • 高級變量-有類型變量

    一.高級變量用法– 有類型變量   Shell 變量一般是無類型的,但是bash Shell 提供了declare和 typeset 兩個命令用于指定變量的類型,兩個命令是等價的 declare [ 選項]  變量名 -r  將變量設置為只讀屬性 -i  將變量定義為整型數 -a  將變量定義為數…

    Linux干貨 2016-11-24
  • Linux學習總結02—Linux的操作系統發展史(原創)

       我們都知道,在美國賓夕法尼亞大學,有那么一種計算機,叫ENIAC,這種機器耗電量是非常大,而且主機也是龐大,它誕生于1946年的2月14日的情人節,確實有紀念意義,就算是約炮也是拿著智能手機先搖一搖,好看就勾搭,不好看的就拉黑,這臺計算機可并不是造福人類的,只是計算數據,我想,當時的情況是這樣,在這臺計算機沒有出世之前,那幫工程師們…

    Linux干貨 2016-10-29
  • 一些基礎命令的基本用法介紹

    節選一部分常用參數用法 基礎命令 tty 切換X Window或命令行模式 Ctrl+Alt+F1~F6  tty1~tty6文字界面 Ctrl+Alt+F7  圖形界面 startx 登錄圖形界面系統 date 日期 date +%Y/%m/%d  當前日期 date +%H:…

    Linux干貨 2016-10-31
  • 磁盤管理之LVM

    1、什么是LVM     LVM(Logical Volume Manager)邏輯卷管理,是linux環境下將一種將一個或多個硬盤的分區在邏輯上集合來呈現給上層應用,對磁盤實現動態管理的機制。相對于普通的磁盤分區有很大的靈活性,使用LVM在一定程度上就可以解決普通磁盤分區帶來的問題。 2、專業術語     &nbsp…

    Linux干貨 2016-09-02
  • N25_第五周

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;grep -E "^[[:space:]]+" /boot/grub2/grub.cfg 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;grep -E "^#[[:space:]…

    Linux干貨 2017-01-08
  • Linux中命令的分類,hash緩存表與別名

        命令的分類:     在Linnux中,平常工作用的是字符界面。Linux輸入命令后,shell接收命令通過系統調用把命令送入內核中執行。    *shell中的可執行命令分為兩類        1.內部命令:為shell自帶命令,利用某種形式在開機后…

    Linux干貨 2017-07-15
欧美性久久久久