Linux文本處理工具和正則表達式

概述:

    Linux核心哲學思想中很重硬件要的一條內容就是一切皆文件,在Linux系統上,無論硬件、軟件、配置文件等等一切,都以文件形式呈現出來。一般文件類型有:普通文件、目錄文件、鏈接文件、管道文件、套接字文件、字符設備文件、塊設備文件等。而普通文件里面又有一些文本文件、二進制文件等細分化的文件類型,而我們日常系統管理工作,主要就是對一些文本類型的文件,進行新增、刪除、修改、查詢等相關操作,來完成系統的維護,那么對文本處理就變成了我們必不可少的基礎既能。

    本章就先簡單介紹一些文本的查看,分析,統計工具,以及正則表達式和grep的相關內容,主要的內容包含以下幾個部分:

        1、文本查看工具介紹(cat、tac、rev、head、tail、more、less、cut、paste)

        2、文本統計工具介紹(wc、sort、uniq)

        3、文本比較工具介紹(diff、patch)

        4、基本正則表達式和擴展正則表達式介紹

        5、文本處理三劍客之grep介紹

    涉及到的命令主要有:cat、tac、rev、head、tail、more、less、cut、paste、wc、sort、uniq、diff、patch、grep、egrep、fgrep

第一章    文本查看工具介紹

    1、cat文本查看工具

        語法:cat [OPTIONS] FILE

        常用選項:

            -n  顯示行號,空白行也加

            -b  顯示行號,空白行不加

            -ns  顯示行號,然后出去重復的行顯示為一行(相鄰且相同)

            -T  顯示TAB鍵

            -v  顯示^M ,也就是\r 的內容,相當于顯示Windows的換行鍵

            -A  顯示所有的內容,所有的隱藏字符,TAB、換行之類的

        示例:

        blob.png

    2、tac:文本查看工具,與cat一樣,只是把cat的內容按行倒序顯示

        示例:

        blob.png

    3、rev:反向顯示文件中每一行的內容

        例如:如文件中是abcdefg,如果用rev顯示,則顯示為gfedcba

        blob.png

    4、head:顯示文件的前幾行,默認是前10行

        語法:head [OPTIONS] FILE…

        常見選項:

            -n 數字:表示顯示文件的前幾行

            -數字:與-n 數字  功能一樣,顯示文件的前幾行

            -c 數字:表示顯示文件的前多少個字節,而不是多少行

        示例:

        blob.png

    5、tail:顯示文件的后幾行,默認是10行

        語法:tail [OPTIONS] FILE…

        常見選項:

            -n 數字 :顯示文件后幾行

            -數字:與-n 數字 功能一樣,顯示文件的后幾行信息

            -n +數字: 從第幾行開始顯示文件信息

            -c 數字:顯示文件的后多少個字節,而不是后幾行

        blob.png

    6、more:分頁顯示文件內容,只能向下翻頁,不能向上翻頁

        選項:    

            -d  能顯示提示信息

        在more界面中,可以運行:

            !執行外部命令

            /string  搜索關鍵字          

            !COMMAND  在more界面下,執行bash命令結果顯示在more界面中,不用退出more

            q 退出more界面

    7、less:分頁顯示文件內容,既能向上翻頁,又能向下翻頁  

        在less界面時:

            /string  向下搜索關鍵字

            ?string  向上搜索關鍵字

                n  按照搜索方向,順向顯示下一個匹配到的內容

                N  按照搜索方向,逆序顯示下一個匹配到的內容

            !COMMAND  在less界面下,執行某命令,不用退出less

            q 退出less界面

    8、cut:字段截取工具,按照指定的分隔符進行分割后顯示,默認分隔符為TAB鍵  

        語法:cut[OPTION]…[FILE]…

            -d   指定分隔符,默認為tab

            -f FILEDS 

                # 第#個字段

                #,#,…   離散的多個字段,如-f1,3,6

                #-#    連續的多個字段,如-f1-3

            -c  按字符切割,取第幾個字符到第幾個字符數顯示的內容

            –output-delimiter=STRING  指定輸出分隔符

        示例:

        blob.png

        

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

        選項:

            -d 分隔符  合并時指定分隔符,默認為tab

            -s   將一個文件所有行合并成一行顯示

        示例:

        blob.png

第二章    文本統計工具介紹

    1、wc  統計工具

        語法:wc [OPTION]… FILE

            -l  顯示多少行

            -c  顯示多少個字節,3個字節標識一個漢字,但是1個漢字只算一個字符

            -w  顯示單詞數量

            -m  顯示字符數

        示例:

        blob.png

    2、sort  排序命令

        語法:sort [OPTIONS]… FILE 排序時默認是按字符a-z排序

        常用選項

            -r 逆序顯示

            -n 按數字大小排序

            -f 忽略字符大小寫

            -u 刪除結果中的重復行(不管相不相鄰,都去重)

            -t STRING 選項使用指定字符做為字段界定符

            -k X 選項按照使用上面-t字符分隔的X列來整理能夠使用多次

        示例:

        blob.png

        

    3、uniq:去重顯示,(相鄰且相同才認為是重復)

        語法:uniq [OPTION]… [FILE]…

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

            -d: 僅顯示重復過的行;

            -u: 僅顯示不曾重復的行;

                連續且完全相同方為重復

            常和sort 命令一起配合使用:

                sort userlist.txt | uniq -c

        示例:

        blob.png

第三章    文本比較工具介紹

    1、diff  比較兩個文件之間的不同之處

        語法:diff [OPTIONS] FILE1  FILE2

        常用選項:

            -u  表示利用重定向,將不同之處生成補丁文件,以供利用patch還原用

        示例:

        blob.png

    2、patch補丁工具,復制改變的數據到文件中

        語法:patch [OPTIONS] FILE  PATCHFILE

        選項:

            -b  表示自動備份改變了的文件

        示例:

        blob.png

        blob.png

第四章    基本正則表達式和擴展正則表達式介紹

    1、基本正則表達式

        字符匹配:

            . : 匹配任意單個字符;

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

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

            [0-9]:匹配0-9之間的數字

            [1-9]:匹配1-9之間的數字,注意向匹配10-19之間的數字不能寫成[10-29],要每一位分別寫[1-2][0-9]

            [:digit:]:匹配數字

            [:lower:]:匹配小寫字母

            [:upper:]:匹配大寫字母

            [:alpha:]:匹配所有大寫和小寫字母

            [:alnum:]:匹配數字和大小寫字母

            [:punct:]:匹配標點

            [:space:]:匹配空白字符

        

        匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數

            *:匹配前面的字符任意次,包括0次

            貪婪模式:盡可能長的匹配

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

            \?:匹配其前面的字符0或1次

            \+:匹配其前面的字符至少1次

            \{m\}:匹配前面的字符m次

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

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

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

        

        位置錨定:定位出現的位置

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

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

            ^PATTERN$: 用于模式匹配整行

            ^$: 空行

            ^[[:space:]]*$ :空白行

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

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

            \<PATTERN\>:匹配整個單詞

        

        分組: \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理

        后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)利用: \1, \2, \3, …來引用前面第一個括號、第二個括號…匹配到的內容        

            如: \(niwenchao\+\(nwc\)*\)

                \1: niwenchao\+\(nwc\)*

                \2: nwc

        

        示例:

         # grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd

        blob.png

    2、擴展正則表達式

        個人總結為:相比基本正則表達式,一些需要轉義的位置,除了詞首詞尾錨定\<\>都不需要加轉義符,另外增加了或關系的表達式(|)  

        字符匹配:

            . 任意單個字符

            [] 指定范圍的字符

            [^] 不在指定范圍的字符

            [0-9]:匹配0-9之間的數字

            [1-9]:匹配1-9之間的數字,注意向匹配10-19之間的數字不能寫成[10-29],要每一位分別寫[1-2][0-9]

            [:digit:]:匹配數字

            [:lower:]:匹配小寫字母

            [:upper:]:匹配大寫字母

            [:alpha:]:匹配所有大寫和小寫字母

            [:alnum:]:匹配數字和大小寫字母

            [:punct:]:匹配標點

            [:space:]:匹配空白字符

        次數匹配:

            *:匹配前面字符任意次

            ?: 0或1次

            +: 1次或多次

            {m}:匹配m次

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

        

        位置錨定:

            ^ :行首

            $ :行尾

            \<, \b :詞首

            \>, \b :詞尾

        

        分組:

            ()

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

        或者:

            a|b

            C|cat: C或cat

            (C|c)at:Cat或cat

第五章    文本處理三劍客之grep介紹  

    grep:過濾出特定的行

        grep 支持標準正則表達式

        egrep  支持擴展正則表達式,相當于grep -E

        fgrep  不支持正則表達式

    語法:grep [OPTIONS] PATTERN [FILE…]

    選項:

        –color=auto: 對匹配到的文本著色顯示;

        -v: 顯示不能夠被pattern匹配到的行;

        -i: 忽略字符大小寫

        -n: 顯示匹配的行號,匹配到的是第幾行

        -c: 統計匹配的行數,匹配到了多少行

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

        -q: 靜默模式,不輸出任何信息

        -A #: after, 后#行,除了顯示匹配到的行外,還顯示匹配到的行的后幾行

        -B #: before, 前#行,除了顯示匹配到的行外,還顯示匹配到的行的前幾行

        -C #: context, 前后各#行,除了顯示匹配到的行外,還顯示匹配到的行的前后各幾行

        -e:實現多個選項間的邏輯or關系

            grep –e ‘cat ’ -e ‘dog’ file

            多個-e 之間是或關系

        -w:整行匹配整個單詞,只能匹配整個單詞,不能是一個單詞的一部分,前后可以是符號,但是不能是字母

        -E:使用ERE,相當于egrep

        -F:相當于fgrep,不支持正則

        

        nmap -sP -v 10.1.252.210/24  表示掃描該網段的主機

        查看網段內有哪些主機處于連接狀態:

        nmap -sP -v 10.1.252.210/24 |grep -B1 “up”|grep -v “up”

    blob.png

    blob.png

    正則表達式表示身份證號

        1:     [1-9]

        2-6:   [0-9]{5}

        78:    (19|20|21)

        9-10   [0-9]{2}

        11-12  ((0[1-9])|11|12)

        13-14  ((0[1-9])|([12][0-9])|(3[0-1]))

        15-17  [0-9]{3}

        18     [0-9X]

   # egrep "\<[1-9][0-9]{5}(19|20|21)[0-9]{2}((0[1-9])|(10|11|12))((0[1-9])|([12][0-9])|(3[0-1]))[0-9]{3}[0-9Xx]\>" 

    blob.png

    找出ifconfig命令結果中本機的所有IPv4地址

    # ifconfig|grep -E -o "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"

    1.png

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

(0)
M20-1倪文超M20-1倪文超
上一篇 2016-08-07 22:07
下一篇 2016-08-07 22:07

相關推薦

  • Tomcat

    簡介 Tomcat是由Apache軟件基金會下屬的Jakarta項目開發的一個Servlet容器,按照Sun Microsystems提供的技術規范,實現了對Servlet和JavaServer Page(JSP)的支持,并提供了作為Web服務器的一些特有功能,如Tomcat管理和控制平臺、安全域管理和Tomcat閥等。由于Tomcat本身也內含了一個HTT…

    2017-05-25
  • Nginx常用配置詳解

    Nginx常用配置詳解(一) 本文依照nginx官方站點文檔介紹常用的nginx各種常用配置,未經過校對,如有錯誤還望海涵。 Nginx配置通用語法 Nginx最基本的配置語法 配置項名 配置項值1 [配置項值2 ….]; 配置項名位于行首,配置項值與配置項名之間用空格隔開,多個配置項值之間也用空格隔開,每行配置結尾必須加上分號。 #配置項名 配置項值1…

    Linux干貨 2017-06-20
  • linux進程及作業管理

    linux進程及作業管理 cpu指令權限等級: 特權級也叫hierarchical protection domains, 有的也叫用戶態. 是一種用來保護數據和阻止惡意行為的機制. 電腦操作系統提供不同權限訪問級別的資源. 特權級分為四級, 特權級0,1,2,3. 在windows中只使用特權級0和特權級3, 特權最高的是特權級0, 可以直接操作硬件, 如…

    Linux干貨 2016-09-19
  • 系統基礎之文件管理grep練習題

    1、顯示/proc/meminfo文件中以大小s開頭的行; (要求:使用三種方式) [root@wen-7 ~]# grep -i "^s" /proc/meminfo  SwapCached:       &…

    Linux干貨 2016-08-07
  • N26-第二周

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。(盜圖了,哈哈哈) 文件查看類命令:cat, tac, head, tail, more, less,touch    cat 查看文件內容   tac命令   反向查看文件內容  注:可對照上圖 分屏查看命令:more  …

    Linux干貨 2017-01-07
  • LVM練習題

    創建一個至少有兩個PV組成的大小為20G的名為testvg的 VG;要求PE大小為16MB, 而后在卷組中創建大小為5G的邏 輯卷testlv;掛載至/users目錄 第一步!首先準備足夠大的硬盤來實驗 [root@Cloud /]#lsblk  #添加了/dev/sdb/c硬盤  NAME  &n…

    Linux干貨 2017-08-26
欧美性久久久久