文本處理、正則表達式、cut、grep、egrep、fgrep

文本處理、正則表達式、cut、grep、egrep、fgrep

Linux中文本處理工具最常用的就是文本處理三劍客grep、sed、awk再配合正則表達式,可以實現足夠多的文本處理功能。工具的強大之處是因為使用它的人,如何才能發揮文本處理工具的作用呢?答案就是正則表達式,其實正則表達式,只是一種思想,一種表示方法,只要我們使用的工具支持表示這種思想那么這個工具就可以處理正則表達式的字符串。這部分內容可以說是學習shell腳本之前必學的內容,理解越深刻那么shell腳本編寫能力就會越強。

文本處理

  1. 文本查看工具 

    • cat -n(包含了$回車符),-b-A(-vTE),-e(-vE),-v(有^M無^T),-s,-E(回車)

    • tac -n,-b,-A(-vTE),-e(-vE),-v(有^M無^T),-s,-E(回車)

    • rev

    • more -d(加提示),只能下翻,能命令

    • less PgUP翻頁,能搜,能命令

    • head -n 前幾行,默認10行

    • tail -n 后幾行,默認10行,-f /var/log/messages前端監控日志,tail -n 0 -f

    • /var/log/message &后端顯示新日志,不影響使用,fg 1切換前臺,ctrl c終止

  2. cut 

    • cut -d-f1-5,6,7 /etc/passwd # : 號截取,第幾段 –output-delimiter=+ # 替換分隔符

    • cut -c44-46 file #字符截取,監控磁盤

  3. paste 橫向合并兩個文件 

    • paste -d: #指定橫向分隔的符號,默認Tab

    • paste -s #一個文件的內容合并成一行顯示

  4. wc (word count) #字符收集統計數據 

    • wc file #行、單詞、字節

    • wc -m #統計字符數

    • wc -l #統計行數

    • wc -w #統計以標點或space隔開的單詞數

    • wc -c #統計字節數

    • wc 輸入字符,最后輸入空格開的被統計字符,再ctrl d

  5. sort #文本排序 

    • sort -t ‘.’ #使用 . 做為字段界定符

    • sort -r #反序

    • sort -f #忽略字符串中的大小寫

    • sort -n #按數字排序

    • sort -u #去除重復行

    • sort -k3 #按 . 分隔符根據第3列來整理,可重復多次

    • sort -ut ‘.’ -k3 #按 . 分隔符根據第3列來整理并歸類,去除不屬于該類的行

  6. uniq #從輸入中山城重復的前后相接的行 

    • uniq file #合并相鄰的重復行

    • uniq -c file #顯示合并的重復次數

    • uniq -d file #只顯示重復的行

    • uniq -u file #顯示不重復的行

  7. diff #比較兩個文件之間的區別 

    • diff xx yy

    • diff -c xx yy

    • diff.jpg

    • 其中1-3表示行號c表示不同,常用的a表示多余的行,d表示刪除的行,即少的行,<表示第一個文件,>表示第二個文件。。diff -c 會以上下文的形式顯示兩個文件的不同之處,文件時間不同也會進行比較,行中不同的地方會在此行前加”!”:

    • diff -u #選項來輸出“統一的(unified)”diff格式文件,最適用于補丁文件

  8. patch #復制對文件改變 

    • patch -b #自動備份改變了的文

    • diff -u xx yy>zz.patch

    • patch -b xx zz.patch

  9. grep:global serarch REgular expressin and print out the line 

    • grep -E = egrep、grep -F fgrep(不支持正則表達式)

    • .bashrc加入alias grep=’grep –color=auto’

    • grep xxxx /etc/passwd /etc/group …. 在centos7上帶顏色

    • grep ‘$USER’ / “$USER” / whoami /etc/passwd

    • grep -v string #顯示不包含string的行,排除

    • grep -i String #忽略大小寫

    • grep -n string #顯示包含string的行號

    • grep -c string #統計string的行數

    • grep -o strng #僅顯示string,配合正則表達式,精確匹配

    • grep -q string #靜默模式,echo $?看看返回值

    • grep -A3 string #顯示string與string后面(After)3行,可作為string輔助過濾,

    • grep -C3 #string前后的3行

    • grep -e ‘root’ -e ‘sbin’ file #實現多個選項的邏輯或關系,類似正則中’root|sbin’

    • grep -w string #完全匹配string,匹配單詞,以標點符號或者空格Tab分隔,類似正則中\bstring\b或\<string\>,具有同等效果,但這是不同的概念,必須加以區分

    • grep -E = egrep #使用擴展的正則表達式

  10. 標準的正則表達式 

    • 由一類特殊字符及文本字符編寫的模式,這些字符有控制或匹配的功能

    • man 7 regex #看正則表達式

    • 程序支持grep、vim、less、nginx

    • 匹配次數

    • grep r.t #匹配任意單個字符

    • grep r[a-z]t #匹配任一指定范圍內的任一個字符,如[aBc]表示匹配a或B或c

    • grep r[^[1-7]]t #不在指定范圍內的任一個字符

    • [:alpha:]、[:digital:]、[:alnum:]、[:punct:]、[:space:]、[:lower:]、[:upper:]

    • \* # *號前的字符重復任意次數,盡可能長匹配

    • .* # 任意長度的字符\? #前面的字符0次或1次,有和沒有都會匹配

    • \+ #前面的字符至少1次

    • \{n\} #n次

    • \{m,n\} #至少m次,至多n次

    • \{,n\} #至多n次

    • \{m,\} #至少m次

    • 位置錨定

    • ^ #句子的行首錨定

    • $ #句子的行尾錨定

    • ^\$ 空行錨定,用cat-A看到的號表示換行,^I表示Tab

    • grep -v “^ *\$” #不顯示以空格開頭的空行

    • grep -v “^[[:space:]]*$” #不顯示以空格和Tab開頭的空行

    • grep '\bstr’ 或 ‘\<str’ #str開頭單詞的詞首錨定

    • grep ‘st\b’ 或 ‘\>str’ #str結尾單詞的詞尾錨定

    • \<string\> #匹配整個單詞

    • 分組

    • \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,如:(root)+分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為:\1, \2, \3, …

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

    • 實例`:(string1+(string2)*)

    • \1: string1+(string2)*

    • \2: string2

    • 后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)

    • 邏輯或

    • (root|bash)’ #匹配root或bash

    • \(ba|c\)sh’ #匹配bash或csh

  11. egrep及擴展的正則表達式,省略了轉義符 

    • egrep = grep -E #可使用擴展的正則表達式

    • 字符匹配: . [] [^]

    • 次數匹配: * ? + {n} {m,n}

    • 位置錨定: ^ $ \< \> \b

    • 分組: (``) 后向引用:\1,\2...

    • 邏輯或: (a|b) (a|b)c

    • + 與 * 的區別:* 匹配的是零次或者多次,被重復的內容可能并不會出現;+ 至少出現一次如ca+t會匹配cat和caaat,但不會匹配ct

    • 注意:使用grep -E或者egrep時不要添加上述符號的轉義符

練習

8.5練習.jpg

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

(0)
hellochelloc
上一篇 2016-08-07
下一篇 2016-08-07

相關推薦

  • lvs筆記之nat&dr模型簡單實現

    lvs筆記之nat&dr模型簡單實現 lvs筆記之nat&dr模型簡單實現 lvs 集群 實現 負載均衡 nat lvs筆記之nat&dr模型簡單實現 ipvsadm使用說明 lvs-nat的簡單實現 踩過的坑1 lvs-dr實現 總結 ipvsadm使用說明     -A: 添加一個…

    2017-01-03
  • 基于rsync+inotify實現數據實時同步傳輸

    前言 與傳統的cp、tar備份方式相比,rsync具有安全性高、備份迅速、支持增量備份等優點,通過rsync可以解決對實時性要求不高的數據備份需求,但隨著文件數量的增大和實時同步的要求,rsync已不能滿足需求,隨之rsync+inotify便應運而生。本文將講解rsync的基礎知識和如何基于rsync+inotify實現數據實時同步傳輸。 rsync相關介…

    Linux干貨 2015-04-27
  • swap與dd命令使用詳解

    處理交換文件和分區     交換分區是系統RAM 的補充 基本設置包括:     創建交換分區或者文件     使用mkswap 寫入特殊簽名     在/etc/fstab 文件中添加適當的條目 &…

    Linux干貨 2017-04-30
  • 行編輯器sed的應用

    sed sed:Stream EDitor,行編輯器 sed是一種流編輯器,它一次處理一行內容,處理時,把當前處理的行存儲在臨時緩沖區中, 稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后, 把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒 有改變,除非你使用重定向存儲輸出。 se…

    Linux干貨 2016-08-10
  • N22-妙手-第十周博客作業

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情)     (1) POST階段         加電自檢,確保每個設備能正常工作     (2) BIOS  &nb…

    Linux干貨 2016-12-05
  • linux小小小入門。

      ?用戶登錄: ? ? ❤root用戶 這是一個特殊的管理賬戶,也被稱為超級賬戶,root已經接近完整的系統控制。但是對系統的損害有非常廣泛的能力。(一般情況下不會登錄root) ? ? ❤普通用戶 權限有限,損害能力較小。 ?終端terminal: ? ? ❤設備終端 鍵盤,鼠標,顯示器 ? ? &#x…

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