簡單的文本處理工具和正則表達式

一、文本工具

    在linux中,有很多優秀且功能強大的文本處理工具,對文件內容進行查找、替換、刪除、排序等操作,是linux進行文本處理變得特別方便。日常工作中,經常會用文本處理進行日志分析,文本抽取等,所以掌握文本處理,將會對我們的工作起到極大的作用。

cat:查看文件

    cat [OPTION]…[FILE]…

    -n 顯示每行編號

blob.png

    -E 顯示行結束符

blob.png

    -A 顯示所有控制符

blob.png

    -b 顯示非空行編號

blob.png

    -s 壓縮連續的空行成一行

more:分頁查看文件

    more [OPTION…] FILE…

    -d 顯示翻頁和退出的提示

less:逐頁查看文件或用STDIN輸出

    查看時常用的快捷鍵

    /文本    搜索

    n/N     跳到上一個或下一個匹配的文本

    (man命令使用less分頁器)

head:查看前文檔的前十行內容

    -c #  指定獲取前#個字節

blob.png

    -[n] # 獲取指定的前n行

blob.png

cut 抽取文本

    cut [OPTION]…[FILE]…

    -d DELIMITER 指定分隔符,默認下tab

     -f 跟蹤顯示文件按新追加的內容,常用于日志文件的監控

    # 第#個字段

    #,#[,#…] 顯示離散的多個字段

    #-# 顯示連續的多個字段

    可以混合使用:#-#,#:例如1-3,5

    -c 按照字符切割

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

paste多個文件同行合并

    paste [OPTION]…[FILE]…

blob.png

    -d 指定分隔符

    -s 把所有的行合成一行顯示

blob.png

wc:收集文本統計數據

    wc DIR 顯示順序為,行數、字數、字符數、文件名。

    -l 僅顯示行數

    -w 僅顯示單詞總數

    -c 僅顯示字數

    -m 僅顯示數字符總數

sort:文本排序

    sort [OPTION] FILE(s) 在不改變原文件的情況下,把原文件中的內容顯示在STDOUT

    -r 反向整理

    -n 按數字大小整理

    -f 忽略字符串大小寫

    -u uniqe刪除重復的行

    -t 使用指定的字段界定符,默認tab

uniq:從輸入中刪除連續重復的行

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

blob.png

    -d 僅顯示重復過的行

    -u 顯示不曾重復的行

    經常和sort一起使用

diff DIR1 DIR2:比較兩個文件之間的差別,命令輸出被保存到一個補丁文件中,使用-u選項可以輸出diff格式的文件,適用于補丁文件。

patch:復制在其他文件中進行的改變

    -b 自動備份改變的文件

    

文件備份示例:

    $ diff -u f1 f2 > f.patch 

    $ patch -b f1 f2

grep:根據指定的模式對目標文件匹配過濾,打印想要的內容

    grep [OPTIONS] PATTERN [FILE…]

    –color=auto 對匹配到的文本著色顯示,CentOS7默認執行

    -v 過濾掉匹配到的行,顯示其他行

    -i 忽略字符的大小寫

blob.png

    -n 顯示匹配到的行號

blob.png

    -c 統計匹配的行數

blob.png

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

    -q 不顯示任何內容

    -A # 顯示匹配到的后#行

blob.png

    -B # 顯示匹配到的前#行

    -C # 顯示匹配到的先后#行

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

blob.png

    -w 整行匹配整個單詞

    -E 使用ERE擴展正則表達式

sed:Stream EDitor,行編輯器

    sed是一種流編輯器,每次只處理一行內容,把當前處理的行存儲在臨時文件緩沖區中,稱為“模式空間(pattern space)”,然后用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,知道文件末尾。文件內容沒有任何改變。sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等。

sed [OPTION]… 'script' inputfile…

常用選項:

    -n    不輸出模式空間內容的自動打印

    -e    多點編輯

    -f /PATH/TO/SCRIPT_FILE    從指定文件讀取腳本

    -r    支持使用擴展正則表達式

    -i    更改原文件(謹慎使用)

地址定界規則:

    (1)沒有地址時,默認對全文處理

    (2)單行地址

        #    指定的行

        /PATTERN/    能被此模式匹配到的每一行

    (3)地址范圍

        #,#    中間的所有行

        #,+#    指定行向下的幾行

        /PART1/,/PAER2/

        #,/PART1/

    (4)~步進

        1~2 表示奇數行

        2~2 表示偶數行

編輯命令:

    d    刪除模式空間匹配的行

    p    顯示模式空間中的內容

    a\text    在匹配的行后面追加文本,支持/n實現多行追加

    i\text    在匹配到的行前面插入文本,支持使用\n實習那多行插入

    c\text    替換匹配到的單行或多行文本

    w /PATH/TO/FILE    保存模式匹配到的行到文件中

    r /PATH/TO/FILE    讀取指定文件的文本至模式空間中匹配到的行后面

    =    為模式空間中的行打印行號

     !    模式空間中匹配到的行取反處理

    s///    查找并替換,可以使用其他分隔符,如s@@@,$$$

        g    行內全局替換

        p    顯示成功替換的行

        w /PATH/TO/FILE    將替換成功的行保存至文件中

二、正則表達式

    正則表達式:有一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不再表示本身的字面意義,而是表示控制或通配的功能。Linux中,很多程序支持正則表達式,正則表達式一般分為,基本正則表達式和擴展正則表達式。

正則表達式元字符

blob.png

blob.png

位置錨定

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

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

    ^PATTERN$:匹配整行

        ^&:表示空行

        ^[[space:]]:表示空白行

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

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

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

分組匹配:

    \(PATTERN\)可以將一個或多個字符捆綁在一起,當作一個整體進行處理。分組括號中的模式匹配到的內容會被正則表達式引擎記錄內部的變量中,這些變量的命名方式為:\1,\2,,…可以用來引用括號中模式所匹配到的字符。其中,\1表示從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符。

    

    

    

    

原創文章,作者:zhanghuanyu,如若轉載,請注明出處:http://www.www58058.com/30939

(0)
zhanghuanyuzhanghuanyu
上一篇 2016-08-10 10:22
下一篇 2016-08-10 10:27

相關推薦

  • 文本處理grep

    grep:文本過濾(模式:pattern)工具grep, egrep, fgrep【適合處理比較大的文本】(不支持正則表達式搜索) sed:stream editor,文本編輯工具 awk:Linux上的實現gawk,文本報告生成器 grep(Global search 全局搜索 Regular expression 正則表達式 and Print out …

    Linux干貨 2017-05-09
  • man命令的用法

    man 命令的用法    在linux運維工作中,經常會有一些命令我們不是很清楚它們的準確用法,這時候我們就需要去查詢這些命令的用法,linux中就有很多文檔幫助我們去了解這些命令的用法,其中就有一條命令man,下面我就總結一下它的用法。     man 是 manual 的簡寫,提供命令的幫助文件。   &…

    Linux干貨 2017-02-17
  • 運維第一步

    學友分享各自工作經歷

    2018-03-26
  • Linux文件層級結構標準(FHS)

    Linux文件層級結構標準(FHS) 設計FHS(Filesystem Hierarchy Standard)的目的主要是為了給Unix-like系統的管理員提供一個管理系統以及目錄結構的一個參考。 由于利用Linux源碼開發產品和發行版的企業或組織眾多,如果每個組織都按照自己的喜好來組織系統中的文件結構,網絡上必然出現各種各樣的文件結構。這些產品的用戶就不…

    2016-12-05
  • shell腳本1——test測試

    程序:指令+數據 程序:算法+數據結構 shell腳本編程: 編程的語言分類:根據運行方式     編譯運行:源代碼——>編譯器——>程序文件     解釋運行:源代碼——>運行時啟動解釋器,由解釋器邊解釋邊執行 根據其編程過程中功能的實現是否調用庫還是調用外部…

    Linux干貨 2016-08-18
  • 日志收集工具EFK之fluent部署手稿

    Edit EFK fluent部署安裝 1. 環境介紹 Centos 6.5 64bit 2. 安裝 td-agent介紹 fluent 考慮到靈活可擴展性,使用Ruby編寫,部分功能考慮性能使用C語言編寫。普通用戶安裝操作Ruby daemon還是有一定難度的。考慮到flunt的上手難度, fluent專門發布了穩定發布包,就也是所謂的td-agent. …

    Linux干貨 2016-03-24
欧美性久久久久