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

一、文本工具

    在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
下一篇 2016-08-10

相關推薦

  • N25第六周作業

    vim 是vi編輯的升級版,同樣有三種工作模式:編輯、命令和一般 模式 #:指定行號位置 #,#:指定多少行到多少行 #,+#:指定范圍,多少行開始,加#行 $:最后一行 .:當前行 .,$-1,當前行到倒數第二行 1,$:全文 %:全文 /從上往下,?:從下往上 搜索 /pattern/:從光標所在處起始向文件尾部第一次被模式所匹配到的行 s/要查找的內容…

    Linux干貨 2017-01-11
  • 銘記今天

        2016年10月19日,我做了一個很艱難的決定,選擇了馬哥24期網絡全程班,就算是沖動也好,無論對錯都要堅持下去。 從出來工作之后,一直做銷售這塊,雖然跟電腦有關,但是其中的艱苦只有自己明白。慢慢的年級上來了,手中沒有什么技術,做人生活,總覺得少了什么,總覺得自己以后會被社會淘汰,心一天一天著急。在后選擇了一個從來都沒有涉及的運維…

    Linux干貨 2016-10-19
  • 第4周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。     ~]# cp -r /etc/skel/ /home/tuser1     ~]# chmod 700 /home/tuser1/ 2、…

    Linux干貨 2016-12-25
  • N25第二周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。     其常用的有: touch、stat、rm、cp、mv、install touch 命令    命令格式: touch [OPTION]… File… 命令參數: -a&n…

    Linux干貨 2016-12-12
  • 分布式文件系統之fastDFS部署

    fastDFS下載地址:https://github.com/happyfish100/fastdfs部署參考文檔:http://joelhy.github.io/2015/01/27/FastDFS-v5-06-deploy/ 我們接下來來部署fastDFS 部署結構: 192.168.42.150 node1 [Tracker]192.168.42.15…

    Linux干貨 2017-06-16
  • N28第五周

    1、簡述rpm與yum命令的常見選項,并舉例
    2、自建yum倉庫,分別為網絡源和本地源
    3、簡述at和crontab命令,制定 每周三凌晨三、五點10分執行某個腳本,輸出當前時間,時間格式為 2017-12-28 10:00:00
    4、簡述sed常用操作命令,并舉例

    Linux干貨 2018-01-03
欧美性久久久久