文本處理、正則表達式、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 #看正則表達式

    • 程序支持grepvim、lessnginx

    • 匹配次數

    • 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 22:05
下一篇 2016-08-07 22:06

相關推薦

  • Package Manager

    Package Manager Package 管理工具的分類 rpm yum Source Code Install 管理工具的分類 前段管理工具:Debian:debRedhat,Suse…:rpm 前端管理工具:Debian:apt-getRedhat:yum,dnf RPM RPM是什么?RPM全稱是RPM Package Manager…

    2016-03-27
  • rsync+inotify實時同步備份數據

    rsync同步 rsync+inotify實時同步備份數據 軟件簡介: rsync命令簡介: rsync命令是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件。rsync使用所謂的“rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。 rsync是一個功能非常強大…

    Linux干貨 2016-10-28
  • N22+張zhangzhang+第5周練習作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell; [root@zxn ~]# cat /etc/passwd | grep -E "^root\>" | cut -d: -f7 /bin/bash …

    Linux干貨 2016-09-15
  • 關于大型網站技術演進的思考(十三)–網站靜態化處理—CSI(5)

    原文出處: 夏天的森林   講完了SSI,ESI,下面就要講講CSI了 ,CSI是瀏覽器端的動靜整合方案,當我文章發表后有朋友就問我,CSI技術是不是就是通過ajax來加載數據啊,我當時的回答只是說你的理解有點片面,那么到底什么是CSI技術了?這個其實要和動靜資源整合的角度來定義。 CSI技術其實是在頁面進行動靜分離后,將頁面加…

    2015-03-11
  • Linux內核介紹

                               Linux內核介紹 嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基于Linux內核,并且使用GNU工程各種工具和數…

    Linux干貨 2016-10-27
欧美性久久久久