正則表達式及文本處理

正則表達式及文本處理

通俗點說,正則表達式就是處理字符串的方法,更加快速簡潔的代表各個要求參數,一般用于描述字符排列和匹配模式的一種語法規則,通過正則表達式一些特殊符號的輔助,讓用戶輕易的查找、刪除、替換一些字符串的處理程序。( ps:正則表達式和通配符不一樣,通配符代表的是bash接口的一個功能,但正則表達式是一種字符串處理的表達方式,兩者一定要分清楚。)


正則表示支持很多命令,例如:grep,sed.awk,vim,less,nginx,varnish等等命令,它分為兩類:

  1. 一種是基本正則表達式(BRE)

  2. 一種是擴展正則表達式(ERE)

下面介紹下基本正則表達式的元字符,分字符又分四類:

  1. 字符匹配

  2. 匹配次數

  3. 位置錨定

  4. 分組

字符匹配

  • .  表示任意單個字符
例如:

正則表達式及文本處理

  • [ ]   表示匹配范圍內的任意單個字符([abc]r 相當于r一個個匹配里面的,如ar,br,cr)

例如:

正則表達式及文本處理

  • [^ ]  表示匹配范圍外的任意單個字符
  • [:alpha:]   任意一個字母(相當于a-zA-Z)
  • [:upper:]  任意一個大寫字母(相當于A-Z)
  • [:lower:]  任意一個小寫字母(相當于a-z)
  • [:digit:]   任意一個數字(相當于0-9)
  • [:space:]  水平和垂直的空白字符(比blank包含的更多)
  • [:blank:]   空白字符(空格和制表符)
  • [:punct:]  標點符號
  • [:alnum:]   任意字母和數字(相當于0-9a-zA-Z)
  • [:print:]   可打印字符

例如:字符的使用

正則表達式及文本處理

(ps:用的時候記得加[],例如:[[:alnum:]]或者[0-9a-zA-Z]這樣用,當然最好還是用[[:alnum:]]這種命令,它會比[a-z0-9A-Z]更為確定一些,在這里漢字也為字母)

匹配次數

  • *   表示*號前面的一個字符的0-N次(它有一個貪婪模式,會盡量匹配最長)

例如:

正則表達式及文本處理

  • .*   表示任意多個長度的字符
  • \?    表示\?符號前的字符0-1次

例如:

正則表達式及文本處理

  • \+     匹配\+前的字符至少1次

例如:

正則表達式及文本處理

  • \{m,n}    表示\{m,n\}符號前的字符的m-n次
  • \{m\}     表示{m\}符號前的字符m次
  • \{n,\}     表示匹配前面字符至少n次
  • \{,n}      表示匹配前面字符最多n次

例如:

正則表達式及文本處理

(ps: \的意義是轉義字符,意思就是將一些有特殊符號的意義去除)

位置錨定

  • ^ 之后接字符    表示^ 之后的字符出現在行首

例如:

正則表達式及文本處理

  • $ 之前接字符    表示$之前的字符出現在行尾

例如:

正則表達式及文本處理

  • \>      表示\> 符號之后的字符出現在單詞的尾部

  • \<      表示\< 之前的字符出現在單詞的首部

  • \<字符 \>      表示只有小于號和大于號之間的字符

例如:

正則表達式及文本處理

(ps:\b 同樣可以用于匹配單詞位置,只不過有時候怕不好區別,最好還是用大于小于,這樣也方便看清)。

分組

  • 分組簡單來說就是\(\)用一個命令將一個或者多個字符捆綁在一起,當成一個整體進行處理,如:\(abc)+

例如:

正則表達式及文本處理

  • 分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1,\2,\3, …,\1表示從左側起第一個左括號以及與之匹配右括號之間的模式所匹配到的字符

\示例:grep \(r..t\).*\(a..b\) \1 \2

\1 :r..t

\2 :a..b

例如:第一個括號為\(r..t\) 那么\1也是r..t

正則表達式及文本處理

  • 或者:\|

示例:a\|b: a或b

C\|cat: C或cat

\(C\|c\)at:Cat或cat

例如:

正則表達式及文本處理

{ps:有時候命令需要整體括起來,加雙引號“”}


擴展正則表達式

擴展正則表達式和基本正常表達式的功能是類似的,包括基本正則表達式的字符匹配都是相同的,擴展正則表達式照樣可以使用,不過擴展正則表達式和基本正則表達式還是有所不同,可以說在某些時候更加簡單。

剛剛我們用的匹配次數、位置錨定、分組的命令有非常多的\,如果使用多了也會看得眼花繚亂,自己有時候也會輸入錯誤或者忘記、漏掉\。

這里我只列出和基本正則有區別的命令:

字符匹配

(和基本正則一模一樣)

匹配次數

  • ?      表示?符號前的字符0-1次(在基本正則里? 表示?符號前的字符0-1次)

  • *        表示+前面的字符至少1次 (在基本正則里\+ 匹配\+前的字符至少1次)

例如:

正則表達式及文本處理

  • {m,n}   表示{m,n}符號前的字符的m-n次

  • {m}      表示{m}符號前的字符m次

  • {n,}      表示匹配前面字符至少n次

  • {,n}      表示匹配前面字符最多n次

位置錨定

(和基本正則一模一樣)

分組

(和匹配次數一樣,把\全部去掉就行了)

grep (r..t).*(a..b) 1 2

\1 :r..t

\2 :a..b

(ps:\1還是要加\號的)


練習

在ifconfig 中找出其ip地址的命令。

ifconfig|grep -E “(<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.){3}<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]>)”

例如:

正則表達式及文本處理

grep 的常用選項

命令說明:按行處理,輸出文件中包含搜索字符串的所有行。(按關鍵字搜索)

格式:grep [-acinv] ‘搜索字符串’ filename

  • grep        選取命令,查找

  • grep -i     忽略字符的大小寫

  • grep –colour     高亮顯示搜索結果

  • grep -o z          表示只顯示匹配中的字符

  • grep -v             表示顯示匹配外的字符行

  • grep -E             表示擴展正則表達式

  • grep -A 數字     表示匹配的字符所對應的行數的后幾行將要被顯示出來

  • grep -B 數字      表示匹配的字符所對應的行數的錢幾行將要被顯示出來

  • grep -C 數字      表示匹配的字符所對應的前后幾行將要被顯示出來

  • grep -E =egrep   (變量)

例子

  • 在文件a.txt中搜索包含字符串good或glad的行:

grep -E 'g(oo|la)d' a.txt

  • 找到以字母a結尾的單詞:

grep -E 'a[[:blank]]' a.txtgrep -E 'a\\b' a.txt

文件查看命令:

cat的常用選項

命令說明:按行處理,將一行消息的某段切出來。(查看文本文件)

格式:cut -d ‘分割字符’ -f fields

  • cut          查看文本文件

  • cut -A      顯示所有

  • cut -E      顯示每行的結束符

  • cut -n      加行號

  • cut -b      減去空白行(有字符的不減去,如空格,tab鍵)

  • cut -s      壓縮相鄰的空行


分頁查看

  • more         分頁顯示(b向回翻頁)

  • more -d     顯示翻頁及退出提示

  • less           分頁顯示(一頁頁查看文件或者輸出,可以回翻,可以搜索)

(ps:man使用的就是less分頁命令)

head的常用選項

  • head            查看命令(不加參數默認查看前10行)

  • head -n 3     查看命令前3行(不加n直接加數字也可以)

  • head -c 3     查看命令前3個字節(回車算一個字節,漢字3個字節)

tail的常用選項

  • tail            查看命令(不加參數默認查看后10行)

  • taul -c 3    查看命令從后開始3個字節

  • tail -f        追蹤查看文件最新追加的內容是否有變化(一般用于日志監控)

  • tail -n 3     查看命令從后開始3行

(ps:& 可放置后臺執行)

wc 的常用選項

命令說明:一般用于文本數據統計

格式:1. 行 2. 單詞 3. 字節 4. 文件名

  • wc -l        統計行數

  • wc -w      統計單詞

  • wc -c       統計字節

  • wc -m      統計字符

sort 的常用選項

  • sort -t:       指定:為分隔符(一般配合k使用,:可以更換各種分隔符, . / : % $ # 等)

  • sort -k:      指定:為分隔符的第幾列排序

  • sort -n       數字排序

  • sort -r        倒序

  • sort -f        忽略大小寫

  • sort -u       刪除重復行

uniq 的常用選項

  • uniq          合并相鄰的重復行

  • uniq -c      顯示重復的次數

  • uniq -d      只顯示重復過的行

  • uniq -u      只顯示不重復的行

(ps: 連續并且完全相同才為重復)

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

(0)
Az2h1丶Az2h1丶
上一篇 2017-06-11 20:29
下一篇 2017-06-11 20:35

相關推薦

  • Shell腳本編程入門

    認識Shell Shell原意為貝殼 Linux系統中的shell是一個特殊的應用程序,它介于操作系統內核與用戶之間,充當一個“命令解釋器”的角色,負責接收用戶輸入的操作指令(命令)并進行解釋,將需要執行的操作傳遞給內核執行,并輸出執行結果。 可以使用命令查看當前使用的是哪種shell以及當前Linux系統中都支持哪些shell種類。   查看當前…

    Linux干貨 2016-08-12
  • Linux-系統啟動的基本過程 以及相關破環修復實驗。

    這章簡單描述下系統的啟動流程,主要以破環修復實驗為主: 系統啟動基本過程:       Linux系統啟動過程大致按照如下步驟進行(這是一個簡述):        第一階段:BIOS啟動引導階段;       …

    2017-07-10
  • Linux任務計劃、周期性執行任務

    Linux任務計劃、周期性執行任務 在未來指定的時間點執行一次某任務:at、batch 周期性的執行某個任務:crontab執行結果會以郵件形式發送給用戶 如何查看郵件服務是否啟用~ ]# ss -tnl mail 命令: mail [-s ‘郵件名’]+ USERNAME 郵件文件的生成: (1) 交互式輸入: ctrl+d結束或者 以 . 單獨成行 (2…

    Linux干貨 2017-08-16
  • LVS_DR配置

    DR : 192.168.29.150 VIP:192.168.29.100 RS1: 192.168.29.110 VIP:192.168.29.100 RS2:192.168.29.120 VIP:192.168.29.100 RS 配置 1 配置VIP [root@local ~]# ifconfig lo:0 192.168.29.100 netma…

    2017-06-30
  • Linux的哲學思想

    初學Linux,了解一下Linux的哲學思想,對學習Linux還是非常有幫助的。 在了解Linux的哲學思想之前,可以先考慮一下,現在我們所學的Linux系統到底是面向什么應用場景而研發和使用的?個人認為:面向企業,是一個服務器操作系統。其所關注的地方是:高性能、可靠性、易維護性。 基于上述方面的考慮,Linux系統在構建和設計的時候,遵循了如下的哲學思想進…

    Linux干貨 2017-08-30
  • 如何刪除一個目錄下的所有文件,但保留一個指定文件。附一些常用命令

    解答: 假設這個目錄是/xx/,里面有file1,file2,file3..file10   十個文件 方法如下: find /date -type f ! -name “file10″|xargs rm -f 另外還有其他的方法比如:rsync命令和bush的 extglob功能等。在此不一一列舉。 附常用命令: 文件和目…

    2017-07-15
欧美性久久久久