正則表達式及文本處理

正則表達式及文本處理

通俗點說,正則表達式就是處理字符串的方法,更加快速簡潔的代表各個要求參數,一般用于描述字符排列和匹配模式的一種語法規則,通過正則表達式一些特殊符號的輔助,讓用戶輕易的查找、刪除、替換一些字符串的處理程序。( 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
下一篇 2017-06-11

相關推薦

  • Linux用戶和組相關知道小結

    用戶和組主要配置文件相關的參數,以及這些文件管理常用的命令。有很多的不足的地方。望大家指導。

    Linux干貨 2017-11-18
  • 馬哥教育網絡21期+第八周練習博客

    馬哥教育網絡21期+第八周練習博客 # 1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 集線器:工作于ISO模型的物理層,防止由于距離遠,信號衰減; 網橋:用來連接不同網段,隔離沖突域; 二層交換機:二層交換機一般做為了三層交換機以下,利用設備mac地址進行通信,可以劃分vlan,隔離廣播域; 三層交換機:用于核心數據轉發,不…

    Linux干貨 2016-09-05
  • linux文件目錄詳解

    linux目錄結構   (且看且不看) 歷史上 /usr和 /etc文件夾下既保存靜態文件,也保存可變文件,后來有了/var層次結構,/usr下面的可變文件被轉移到/var下面。因而/usr現在可以只讀的方式掛載(如果它在單獨的文件系統上)。 /etc下的可變文件早已轉移到/var,因為技術上允許/ 根是系統內核啟動后掛載的第一個分區,掛載到根上的…

    Linux干貨 2017-05-31
  • Find命令的使用

    Find命令的基本用法 在Linux系統中find命令是一個強大文件查找類工具,它支持根據文件名,權限,文件大小,訪問以及修改時間查找,使用方法如下: find [option] [查找起始路徑] [查找條件] [處理動作] 起始路徑:指定查找文件或目錄的路徑,默認為當前目錄 查找條件:可根據文件名,權限,文件大小以及從屬關系查找文件 處理動作:動查找到的文…

    Linux干貨 2017-08-28
  • 快速運用NFS共享web頁面

    環境:centos7.3最小化三臺,前期準備關閉防火墻和selinux 目的:通過文件共享,使客戶端訪問web服務器時是同樣的頁面。 拓撲圖: 優勢:減少WEB服務器的壓力。 一、安裝軟件 NFS、WEB1、WEB2: #yum install nfs-utils -y WEB1、WEB2: #yum install httpd -y 二、配置 NFS: #…

    2017-04-27
  • iptables基礎詳解

    一.iptables基礎認知二.iptables使用格式  一.iptables簡介   1.Iptabels是與Linux內核集成的包過濾防火墻系統,幾乎所有的linux發行版本都會包含Iptables的功能。如果 Linux 系統連接到因特網或LAN、服務器或連接 LAN 和因特網的代理服務器, 則Iptables有利于在 …

    2017-05-03
欧美性久久久久