Linux實戰教學筆記10:正則表達式

来源:http://www.cnblogs.com/chensiqiqi/archive/2017/01/14/6285060.html
-Advertisement-
Play Games

第十節 正則表達式 標簽(空格分隔):Linux實戰教學筆記 [更多資料點我查看][1] 第1章 什麼是正則表達式 1. 正則表達式就是為了處理大量的文本|字元串而定義的一套規則和方法 2. 通過定義的這些特殊符號的輔助,系統管理員就可以快速過濾,替換或輸出需要的字元串。Linux正則表達式一般以行 ...


第十節 正則表達式

標簽(空格分隔):Linux實戰教學筆記

---更多資料點我查看


第1章 什麼是正則表達式

  1. 正則表達式就是為了處理大量的文本|字元串而定義的一套規則和方法
  2. 通過定義的這些特殊符號的輔助,系統管理員就可以快速過濾,替換或輸出需要的字元串。Linux正則表達式一般以行為單位處理。

簡單說

  • 為處理大量文本|字元串而定義的一套規則和方法
  • 以行為單位出來,一次處理一行

正則表達式是一種描述一組字元串的模式,類似數字表達式,通過各種操作符組成更小的表達式

第2章 為何使用正則表達式

linux運維工作,大量過濾日誌工作,化繁為簡。
簡單,高效。
正則表達式高級工具;三劍客都支持

第3章 容易混淆的兩個註意事項

  • 正則表達式應用非常廣泛,存在於各種語言中,php perl grep sed awk 支持。ls * 通配符
  • 但現在學的是Linux中的正則表達式,最常應用正則表達式的命令是grep(egrep),sed,awk。
  • 正則表達式和通配符有本質區別

正則表達式用來找:【文件】內容,文本,字元串。一般只有三劍客支持
通配符用來找:文件名,普通命令都支持

第4章 正則表達式使用註意事項

  1. linux正則表達式以行為單位處理字元串

  2. 便於區別過濾出來的字元串,一定配合grep/egrep命令學習。

QQ20170113-120100@2x.png-44.5kB

  1. 註意字元集,exportLC_All=C:無論何時,做何事都要註意字元集
    QQ20170113-120538@2x.png-60.2kB

第5章 正則表達式的分類

POSIX規範將正則表達式的分為了兩種

  • 基本正則表達式(BRE,basic regular expression)
  • 高級功能:擴展正則表達式(ERE,extended regular expression)

5.1 BRE和ERE的區別僅僅是元字元的不同:

  • BRE(基礎正則表達式)只承認的元字元有^$.[]*其他字元識別為普通字元:\(\)
  • ERE(擴展正則表達式)則添加了(){}?+|等
  • 只有在用反斜杠“\”進行轉義的情況下,字元(){}才會在BRE被當作元字元處理,而ERE中,任何元符號前面加上反斜杠反而會使其被當作普通字元來處理。

第6章 如何區分通配符和正則表達式

  1. 不需要思考的判斷方法:在三劍客awk,sed,grep,egrep都是正則,其他都是通配符
  2. 區別通配符和正則表達式最簡單的方法:

(1)文件目錄名===>通配符
(2)文件內容(字元串,文本【文件】內容)===>正則表達式

  1. 通配符和正則表達式都有“*”,“?”,“【】”,但是通配符的這些符號都能自身代表任意字元,而正則表達式的這些符號只能代表這些符號前面的字元

第7章 基本正則表達式

7.1 基礎正則表達式

字元 描述
^ ^word搜索以word開頭的內容

QQ20170113-132202@2x.png-30.8kB

$ word$搜索以word結尾的內容

QQ20170113-132502@2x.png-36.3kB

^$ 表示空行,不是空格

QQ20170113-192441@2x.png-133.1kB

. 代表且只能代表任意一個字元(不匹配空行)

QQ20170113-192802@2x.png-19.3kB

\ 轉義字元,讓有特殊含義的字元脫掉馬甲,現出原形,如\.只表示小數點

QQ20170113-193830@2x.png-29.5kB

* 重覆之前的字元或文本0個或多個,之前的文本或字元連續0次或多次

QQ20170113-200334@2x.png-86.6kB

.* 任意多個字元

QQ20170113-195151@2x.png-83.1kB

^.* 以任意多個字元串開頭,.*儘可能多,有多少算多少,貪婪性

QQ20170114-093126@2x.png-45.7kB

括弧表達式
[abc][0-9][\.,/] 匹配字元集合內的任意一個字元a或b或c:[a-z]匹配所有小寫字母;表示一個整體,內藏無限可能;[abc]找a或b或c可以寫成[a-c]

QQ20170114-100040@2x.png-82.2kB

[^abc] 匹配不包含^後的任意字元a或b或c,是對[abc]的取反,且與^含義不同

QQ20170114-100916@2x.png-37.3kB

a\{n,m\} 重覆前面a字元n到m次(如果用egrep或sed -r可去掉斜線)

QQ20170114-102002@2x.png-67.9kB

a\{n,\} 重覆前面a字元至少n次,如果用egrep或sed -r可去掉斜線
a\{n\} 重覆前面a字元n次,如果用egrep或sed -r可去掉斜線
--- ---

第8章 擴展正則表達式ERE

特殊字元 含義與例子
+ 重覆前一個字元一次或一次以上,前一個字元連續一個或多個,把連續的文本/字元取出

QQ20170114-104142@2x.png-97.8kB

重覆前面一個字元0次或1次(.是有且只有1個)

QQ20170114-104617@2x.png-55.8kB

管道符 表示或者同時過濾多個字元

屏幕快照 2017-01-14 上午10.57.12.png-92.5kB

() 分組過濾被括起來的東西表示一個整體(一個字元),後向引用

QQ20170114-111147@2x.png-72.7kB

第9章 正則小結

  • 基礎正則:BRE
    |^|$|.||.|[abc]|[^abc]|
    |---|---|

  • 擴展正則:ERE
    |+|\||?|()|{}|a{n,m}|a{n,}|a{n}|
    |---|---|

  • 轉義字元\:將字元的意思改變(不支持正則符號的,轉變字元含義為正則,支持正則的轉變為普通字元含義)

註意:

  • grep預設不支持正則,因此正則表達式的符號對於grep來說就等同於普通字元含義,因此,想讓grep直接處理正則符號必須通過轉義字元\{\}來處理。
  • grep -E 強制讓grep直接認識正則符號,不需要再進行轉義
  • egrep 等效grep -E 天生就能認識正則符號
  • 我們平時備份可以通過cp 文件名{,.bak}的形式進行,避免再打一次文件名
    sed -r :讓sed支持正則

第10章 基本正則和擴展正則區別

基礎正則BRE 擴展正則ERE
\? ?
\+ +
\{\} {}
\( \ ) ()
\

所謂基礎正則實際上就是得需要轉義字元配合表達的正則,而擴展正則就是讓命令擴展它的許可權讓他直接就認識正則表達符號(egrep,sed -r,awk直接支持)

第11章 補充說明

11.1 一些預定義的:

正則表達式 描述 示例
[:alnum:] [a-zA-Z0-9]匹配任意一個字母或數字字元 [[:alnum:]]+
[:alpha:] 匹配任意一個字母字元(包括大小寫字母) [[:alpha:]]{4}
[:blank:] 空格與製表符(橫向縱向) [[:blank:]]*
[:digit:] 匹配任意一個數字字元 [[:digit:]]?
[:lower:] 匹配小寫字母 [[:lower:]]{5,}
[:upper:] 匹配大寫字母 ([[:upper:]]+)?
[:punct:] 匹配標點符號 [[:punct:]]
[:space:] 匹配一個包括換行符,回車等在內的所有空白符 [[:space:]]+
[:graph:] 匹配任何一個可以看得見的且可以列印的字元 [[:graph:]]
[:xdigit:] 任何一個十六進位數 [[:xdigit:]]+
[:cntrl:] 任何一個控制字元(ASCII字元集中的前32個字元) [[:cntrl:]]
[:print:] 任何一個可以列印的字元 [[:print:]]

11.2 元字元

元字元是一種Perl風格的正則表達式,只有一部分文本處理工具支持它,並不是所有的文本處理工具都支持

正則表達式 描述 示例
\b 單詞邊界 \bcool\b匹配cool,不匹配coolant
\B 非單詞邊界 cool\B匹配coolant不匹配cool
\d 單個數字字元 b\db匹配b2b,不匹配bcb
\D 單個非數字字元 b\Db匹配bcb不匹配b2b
\w 單個單詞字元(字母,數字與_) \w匹配1或a,不匹配&
\W 單個非單詞字元 \W匹配&,不匹配1或a
\n 換行符 \n匹配一個新行
\s 單個空白字元 x\sx匹配xx,不匹配xx
\S 單個非空白字元 x\S\x匹配xkx,不匹配xx
\r 回車 \r匹配回車
\t 橫向製表符 \t匹配一個橫向製表符
\v 垂直製表符 \v匹配一個垂直製表符
\f 換頁符 \f匹配一個換頁符

第12章 正則表達式總結

  • egrep/grep 瞭解一下正則,簡單看看效果,結果
  • egrep/grep -o 參數看正則到底匹配了什麼
  • 多練就好,配合grep,egrep,sed -r,awk更為強大

第13章 參考資料

點我查看:正則表達式30分鐘入門教程




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在 Windows 域環境中,每個項目組會創建一個項目管理賬戶,在和其他項目組進行數據交互時,只需要授予該項目管理賬戶相應的許可權,方便了許可權的管理。對於項目組管理賬戶:domain\admin,該域賬戶被授予管理員許可權,能夠登錄到項目組的所有伺服器,訪問所有資料庫,而普通成員的許可權則十分有限。 一, ...
  • 在紅帽RHEL7系統中firewalld服務取代了iptables服務,但依然可以使用iptables命令來管理內核的netfilter。 iptables命令中則常見的控制類型有: 規則鏈則依據處理數據包的位置不同而進行分類: PREROUTING:在進行路由選擇前處理數據包 INPUT:處理入站 ...
  • IP:10.104.0.101 [root@localhost network-scripts]# cat ifcfg-em1 [root@localhost network-scripts]# iptables -F [root@localhost network-scripts]# iptabl ...
  • 配置環境: 操作系統:Windows Server 2003 sp2企業版 Web伺服器:系統自帶的IIS6.0 所需工具: PHP:php-5.2.12-Win32.zip(官方網址:http://www.php.net) 資料庫:mysql-5.0.22-win32.zip(官方網址:http: ...
  • 用MSI安裝包安裝 根據自己的操作系統下載對應的32位或64位安裝包。按如下步驟操作: MySQL資料庫官網的下載地址http://dev.mysql.com/downloads/mysql,第一步: 安裝許可 雙擊安裝文件,在如下圖所示界面中勾選“I accept the license term ...
  • 這篇文章將對linux下udp socket編程重要知識點進行總結,無論是開發人員應知應會的,還是說udp socket的一些偏僻知識點,本文都會講到。儘可能做到,讀了一篇文章之後,大家對udp socket有一個比較全面的認識。本文分為兩個專題,第一個是常用的upd socket框架,第二個是一些 ...
  • redhat 的更新包只對註冊的用戶生效,所以我們需要自己手動更改成CentOS 的更新包,CentOS幾乎和redhat是一樣的,所以無需擔心軟體包是否可安裝,安裝之後是否有問題。 ...
  • linux教學輔助訓練(第二階段) 標簽(空格分隔):Linux輔助訓練 [更多資料點我查看][1] 提示 :本階段性練習題是對《實戰教學筆記》相應章節知識的歸納與擴展部分,必須要會,是面試前必須重溫的一套基礎練習。(第一階段即為實戰教學筆記第四節 Linux命令基礎)。 一,問答考試 1.1 解釋 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...