linux下關于正則表達式grep的一點總結_正則表達式

來源:腳本之家  責任編輯:小易  

把 grep 要匹配的內容用雙引號或者單引號括起來,比如 ls-la|grep"m*xls-la|grep"m1\\{1,3\\}x否則bash會按照自己的方式(文件通配符替換)去替換*,.等符號。這樣真正傳入grep的并不是你看到的 m*x等,而是已經被bash替換后的內容www.anxorj.tw防采集請勿采集本網。

正則表達式(Regular Expression)是用于描述一組字符串特征的模式,用來匹配特定的字符串。通過特殊字符+普通字符來進行模式描述,從而達到文本匹配目的工具。類似于生活中常見的尋人啟示,通過描述一個人的特征來進行“搜索匹配”

1、標準的C和C++都不支持正則表達式,但有一些函數庫可以輔助C/C++程序員完成這一功能,其中最著名的當數Philip Hazel的Perl-Compatible Regular Expression庫,許多Linux發行版本都帶有這個函數

如今正則已經被我們廣泛應用,目前被集成到了各種文本編輯器/文本處理工具當中

[seesea2517~]$cat file.txt logo={ baseAddr=0x80ec0000,endAddr=0x80f00000 }, 得到第一個 [seesea2517~]$sed-r\"s/.*baseAddr=([^]*).*/\\1/\"file.txt 0x80ec0000 得到第二個 [seesea2517~]$sed-r\"s/.*

應用場景**驗證: **表單提交時,進行用戶名密碼驗證。**查找: **從大量信息中快速提取指定內容。在一批url中,查找指定url替換: 將指定格式的文本,進行正則匹配查找,找到之后進行特定替換,(vim文本替換等)

它是一個字符匹配標準,一些命令工具按此標準實現字符匹配,根據命令支持的匹配功能可分為基礎正則表達式和擴展正則表達式,常用于支持正則表達式的工具,如sed,grep,awk. 有如下一些常用的匹配元字符:

在很多技術領域(比如,自然語言處理,數據存儲等),正則表達式可以很方便的提取出我們想要的信息,所以這部分必不可少構成基本要素字符類數量限定符位置限定符特殊符號

分隔符使用正則,在awk的-F參數后可以直接使用正則表達式 表示能夠匹配的都當做分隔符;awk中設置 其他分隔符 如FS、RS等也可以使用正則 字符串函數中使用正則。如split(s,a,fs)在fs上將s分成序列a,其中

1. 字符類:

字符 說明 舉例
. 匹配任意的一個字符 abc. 可以匹配abcd、abc0等
[] 匹配 [] 內的任意一個字符 [012]a可以匹配0a、1a、2a
- 在括號內表示字符范圍 如[0-9]可以匹配任何一個數字
^ 放在[]內前面表示匹配除括號中字符外的任意一個字符 [^ab]c可以匹配1c、dc,但是不能匹配ac、bc
[[:xxx:]] grep工具預定義的一些命名字符類 [[:digit:]]可以匹配一個數字,[[:alpha:]]匹配一個字符,[[:lower:]]匹配任何一個小寫字母等

只顯示數字 \\d+ 只顯示字母[a-z]+ 顯示數字和字母[0-9a-z]+ 不顯示數字[^\\d]+

應用:

grep使用--color選項將匹配的字符串以紅色標注出來Linux下可以用echo $?來打印上一條命令執行的退出碼,為0表示執行成功,1表示失敗。

實驗如下:

注意:使用 . 默認為貪心匹配,和后面的正則匹配方式相關,后面再述。

2. 數量限定符:

字符 說明 舉例
? 匹配緊跟它前面的單元(前面的一個數字或字符) 0或1次 如匹配小數,用0\.?[0-9]匹配0.1 、0.2、0.3等;由于.在正則里面是特殊符號所以需要用\進行轉義操作(后面再說)
+ 匹配緊跟它前面的單元 1或多次 [a-zA-Z0-9_.-][email protected][a-zA-Z0-9_.-]+\.com匹配一個郵箱地址
* 匹配緊跟它前面的單元0或多次 [0-9][0-9]*匹配至少一位數字,等價于[0-9]+
{N} 精確匹配緊跟它前面的單元N次 [0-9]{3}匹配000到999之間的數字
{N,} 匹配緊跟它前面的單元至少N次 [0-9]{3,}匹配三位及其以上的數字
{,M} 匹配緊跟它前面的單元最多M次 [0-9]{,1}等價于[0-9]?
{N,M} 匹配緊跟它前面的單元N~M次 近似匹配IP地址:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

應用:

3. 位置限定符:

字符 說明 舉例
^ 匹配行首位置,從行首開始匹配 ^world只匹配一行開頭的world
$ 匹配行末位置,從行末尾開始匹配 ;$匹配一行末尾的;號,^$匹配空行
< 匹配單詞開始位置 < th匹配this,不匹配teach、ethernet
\> 匹配單詞末尾位置 p\>匹配sleep、leap等,不匹配parent、sleepy
\b 匹配單詞的開始位置、末尾位置 \borld匹配world、aorld,\borld\b只匹配orld
\B 匹配非單詞的開頭、末尾位置 如 \Bat\B匹配battery,不匹配attend、hat等以字符串"at"開頭、結尾的單詞

注意:其中 \b 用來限定是目標串中是否有以指定字符串開頭的單詞,我們稱之為詞界。 \B 稱之為非詞界

應用:

4. 特殊符號:

字符 說明 舉例
\ 轉義字符,普通字符轉義為特殊字符,特殊字符轉義為普通字符 <寫成<匹配單詞開頭,.前面加上\寫成\.. 的字面值
() 將正則表達式的一部分括起來組成一個單元,可以對整個單元使用數量限定符 ([0-9]{1,3}\.){3}[0-9]{3}匹配IP地址
| 連接兩個子表達式,表示或的關系 n(o|either)匹配no或neither

應用:

( )將包含內容括起來作為一個整體,進而通過數量限定符限定。

| 用來級聯多個條件,只要有任意一個匹配,即可匹配,表示或者關系,我們稱之為析取符,

正則表達式版本其他常用通用字符集及其替換

符號 等價于 匹配
\d [0-9] 數字字符
\D [^0-9] 非數字字符
\w [a-zA-Z0-9_] 數字字母下劃線
\W [^\w] 非數字字母下劃線
\s [_\r\t\n\f] 表格,換行等空白區域
\S [^\s] 非空白區域

于是, 我們現在可以用這些符號來簡化我們正則表達式的編寫了?試試

可是結果好像并不如我們所愿?其實這里還與正則表達式版本有關。正則分為以下幾個版本:

基本的正則表達式(Basic Regular Expression 又叫 Basic RegEx 簡稱 BREs)擴展的正則表達式(Extended Regular Expression 又叫 Extended RegEx 簡稱 EREs)Perl 的正則表達式(Perl Regular Expression 又叫 Perl RegEx 簡稱 PREs)

在grep中指定相應的參數即可,而這幾個版本中默認的就是基本正則,帶上-E選項就是擴展正則,而帶上-P參數就是用perl版正則。解決前面的問題,我們這里讓grep帶上-P選項便可解決了

版本間區別正則表達式的Extended規范和Basic規范基本相同。只是在Basic規范下,有些字符 ?+{}|() 應解釋為普通字符,要表示上述特殊含義則需要加 \ 轉義。反之,在Extended規范下, ?+{}|() 應該被理解成特殊含義,要取其字面值,也要對其進行\ \ 轉義。所以, grep 工具帶上 -E 選項,表示使用擴展正則來進行匹配(亦可直接使用egrep 命令操作),若沒有,則表示使用基準正則進行匹配。帶-P選項使用的perl正則匹配。它是perl語言集成的最重要的一種特性,它十分強大,很多語言設計正則式支持的時候基本上都參考Perl的正則表達式。正則匹配模式

貪婪模式

正則表達式去匹配時,會盡量多的去匹配符合條件的內容,grep命令 默認使用的就是貪婪匹配,非貪婪模式

正則表達式去匹配時,會盡量少的匹配符合條件的內容 也就是說,一旦發現匹配符合要求,立馬就匹配成功,而不會繼續匹配下去(除非有g選項,開啟下一組匹配)

總結:可以看到,非貪婪模式的標識符,就是貪婪模式的標識符后面加上一個 ?

man bash:翻閱關于bash的用戶手冊頁,查看其相關的功能和描述。將前面的命令輸出的內容以后面的命令再處理。col-b:過濾掉所有的控制字符,包括RLF和HRLF(使得顯示出來的文本沒有亂碼)。將前面的命令輸出的內容保存到后面所述的文件中。綜合起來,就是把bash的用戶手冊頁的內容,去掉亂碼(控制字符)之后,輸出到當前目錄下的bash.txt內。當命令得到執行,則當前目錄下會出現一個bash.txt文件,里面的內容正是man手冊內關于bash的幫助和介紹內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • linux 正則表達式grep實例分析
  • linux grep與正則表達式使用介紹
  • linux系統用戶管理與grep正則表達式示例教程
  • 淺談linux grep與正則表達式
  • linux grep正則表達式與grep用法詳解
  • 密碼強度檢測函數(正則)
  • php 正則表達式分析rss
  • js中的正則表達式及pattern的注意事項
  • 正則表達式(regex)錯誤使用導致功能漏洞分析
  • 正則表達式口訣 正則表達式學習工具
  • 利用正則表達式(只錄入中文,數字,英文)
  • js:校驗ipv6地址的正則表達式
  • 常用的正則表達式實例整理
  • linux 正則表達式深度解析
  • javascript系列文章:詳解正則表達式基本知識
  • Linux下的正則表達式,幫忙解釋一下
  • Linux正則表達式的問題
  • 求助linux下的正則表達式~
  • Linux正則表達式
  • linux下的C程序,正則表達式怎么表示中文
  • 在linux中如何通過正則表達式提取一行中的特定的十六進制數
  • linux中 正則表達式和通配符的區別
  • Linux系統下如何使用AWK正則表達式
  • linux正則表達式
  • linux正則表達式
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全javascriptasp.netphp編程ajax相關正則表達式asp編程jsp編程編程10000問css/htmlflex腳本加解密web2.0xml/rss網頁編輯器相關技巧安全相關網頁播放器其它綜合dart首頁正則表達式linux 正則表達式grep實例分析linux grep與正則表達式使用介紹linux系統用戶管理與grep正則表達式示例教程淺談linux grep與正則表達式linux grep正則表達式與grep用法詳解密碼強度檢測函數(正則)php 正則表達式分析rssjs中的正則表達式及pattern的注意事項正則表達式(regex)錯誤使用導致功能漏洞分析正則表達式口訣 正則表達式學習工具利用正則表達式(只錄入中文,數字,英文)js:校驗ipv6地址的正則表達式常用的正則表達式實例整理linux 正則表達式深度解析javascript系列文章:詳解正則表達式基本知識java 正則表達式詳解比較正宗的驗證郵箱的正則表達式正則表達式匹配任意字符(包括換最新手機號碼、電話號碼正則表達javascript 手機號碼正則表達式驗js利用正則配合replace替換指定字正則表達式匹配不包含某些字符串正則中需要轉義的特殊字符小結js正則函數match、exec、test、s最全的常用正則表達式大全——包得到連接和圖片的地址 正則正則表達式驗證ipv4地址功能實例分析windows與linux 路徑正則寫法java中正則表達式小總結(整理)最全的常用正則表達式大全史上最詳細的js日期正則表達式分享學php正則!超基礎簡單例子java正則表達式徹底研究js 常用正則表達式表單驗證代碼
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载