[Linux 006]——grep和正則表達式

来源:http://www.cnblogs.com/charleylla/archive/2016/10/23/5988885.html
-Advertisement-
Play Games

在使用系統時,我們或多或少的有一些搜索、查找的需求,必須要在文本中搜索某個關鍵字,或者過濾出文本中某些特定的行。grep 命令就為我們提供了這樣一個功能,同時,grep 還可以使用正則表達式進行匹配,這是一個強大的功能,有必要好好掌握。 1.grep 初體驗 grep PATTERN [OPTION ...


  在使用系統時,我們或多或少的有一些搜索、查找的需求,必須要在文本中搜索某個關鍵字,或者過濾出文本中某些特定的行。grep 命令就為我們提供了這樣一個功能,同時,grep 還可以使用正則表達式進行匹配,這是一個強大的功能,有必要好好掌握。

  1.grep 初體驗

  grep PATTERN [OPTIONS] FILE:在文件中按照模式進行查找。FILE 是我們要查找的目標文件,如果不指定目標文件,grep 將會從標準輸入中讀取輸入的內容,然後進行匹配。為了方便起見,本文的所有演示都在命令行中通過標準輸入進行。

  • grep PATTERN:最基本的用法,根據 PATTERN 進行查找

   如果沒有高亮顯示匹配到的內容,可以手動指定:grep --color PATTER 進行匹配,更可以使用命令別名,減少我們的輸入時間:alias grep="grep --color"。

  • grep PATTERN -i:忽略大小寫匹配
  • grep PATTERN -v:反轉輸出。匹配到的內容不輸出,只輸出沒被匹配到的內容。

  • grep PATTERN -o:只顯示匹配到的字串(PATTERN)。預設顯示匹配到的字串所在的整行文本。

  2.grep 和正則表達式

  正則表達式(Regular Expression 或 REGEXP)分為基礎正則表達式(Basic REGEXP)和擴展正則表達式(Extended REGEXP)。grep 預設採用基礎正則表達式,如需使用擴展正則表達式需要附加選項。  

  由於介紹正則表達式實在太過複雜,我想了很久也無法很好的組織語言,因此這裡就不再對正則中的元字元進行一一的介紹了。需要瞭解這方面的同學,可以去看一下三十分鐘入門正則表達式系列的教程,應該很快就能學會。

  • 使用 grep 進行簡單的正則匹配

  "[]" 表示匹配 [] 中出現的任意一個字元,[a-zA-Z] 表示匹配所有的英文字母。

  "[^]" 表示匹配出去 [] 中出現的字元之外的任意字元。

  

  在正則表達式中,'*' 號不再表示任意字元,而表示其前的字元可以出現任意次。有時候我們在命令中使用 '*' 進行通配符匹配文件,要註意它在正則表達式中的不同用法。在正則表示中使用 '.' 點號來匹配任意字元。

  在正則中,'.' 點號表示不為空的任意字元。 

 ".*" 表示匹配出現任意次數的任意字元。正則表達式預設處於貪婪模式,因此在第一次匹配到結果後,還會進行多次匹配,知道沒有匹配為止。

  "\?" 表示匹配前面的字元出現 0 次 或者 1 次,註意這個問號需要被轉義。

  

  "\{m,n\}" 表示前面的字元出現最少 m 次,最大 n 次。"\{m,\}" 表示前面的字元至少出現 m 次,"\{,n\}" 表示前面的字元至多出現 n 次。

  

  '^' 和 '$' 是正則表達式中的兩個位置錨定。'^' 表示其後的字元必須出現在行首,而 '$' 表示其前的字元必須出現在行尾,"^$" 表示匹配空白字元。

   "\<" 和 "\>" 用來錨定單詞,二者不一定要成對出現,也可以使用 "\b" 進行錨定。"\bWORD" (或者 "\<WORD\>") 表示匹配以 WORD 開頭的單詞,"WORD\b" 表示匹配以 WORD 結尾的單詞,"\bWORD\b" 表示完完全全匹配 WORD 單詞。

  "\(\)" 表示對 PATTERN 進行分組,分組還支持後向引用,使用 "\1","\2" 等引用前面的分組。後向引用只匹配和前面相同的內容。

  '|' 表示或,匹配其前或者其後的單詞,註意並不是匹配字元,如需匹配字元,需要使用分組進行限定。我這裡使用的是擴展正則,如需使用基本正則,需要將 '|' 換為 "\|"。

  3.擴展正則表達式

   grep 同時還支持擴展正則表達式,在使用擴展正則表達式是,需要使用 -E 選項。基礎正則表達式和擴展正則表達式中的一些區別:

  • 基礎正則中使用 \?,擴展正則中使用 ?
  • 基礎正則中使用 \(\),擴展正則中使用 ()
  • 基礎正則中使用 \{\},擴展正則中使用 {}

  在基礎正則表達式中匹配 ?,(),{} ,不需要進行轉移,而在擴展正則表達式中則需要加上轉義符號 \。

  擴展正則表達式中的其他選項:

  • \s:匹配空白字元
  • \S:匹配非空白字元
  • \w:匹配字母,數字,相當於 [0-9a-zA-Z]
  • \W:不匹配字母和數字,相當於 [^0-9a-zA-Z]

  4.grep 的其他選項

  • grep PATTERN FILE -A NUM:使用 grep 進行匹配之後,顯示匹配的行,同時向後顯示指定的行
  • grep PATTERN FILE -B NUM:和上面相反,向後顯示指定行
  • grep PATTERN FILE -C NUM:進行匹配之後,分別向前和向後顯示指定的行,相當於 -AB NUM
  • grep PATTERN FILE -c:顯示被匹配到的行數
  • grep PATTERN FILE -F:相當於 fgrep
  • grep PATTERN FILE -P:使用 Perl 風格的正則表達式
    • \d:匹配任意十進位數字,相當於 [0-9]
    • \D:匹配任意非數字字元,相當於 [^0-9]

  5.egrep 和 fgrep

  在使用 grep 時,如果想要開啟擴展正則表達式,需要指定 -E 選項,而 egrep 命令則是預設支持擴展正則表達式。因此在需要使用擴展正則表達式時推薦使用 egrep 代替 grep -E。

  fgrep 表示快速匹配,不支持正則表達式,沒有轉義的概念,會對 PATTERN 中的所有字元進行匹配。

  6.總結

  本篇我們介紹了 grep 命令和正則表達式的基本使用,grep 是 Linux 下的一個文本處理命令,配合正則表達式使用,其功能非常強大。grep 主要用來查找操作,如果想使用替換等更加強大的功能,就需要使用 sed 或者 awk 命令。grep,sed,awk 被稱為 Linux 下的三個文本處理殺器,等學到相應的章節再繼續介紹 :)

 


 

作者:Charleylla  轉載請註明出處:http://www.cnblogs.com/charleylla/p/5988885.html 

 


 


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

-Advertisement-
Play Games
更多相關文章
  • 官方網址:https://www.elastic.co/products/elasticsearch/ 一、特性 1、支持中文分詞 2、支持多種數據源的全文檢索引擎 3、分散式 4、基於lucene的開源搜索引擎 5、Restful api 二、資源 smartcn, 預設的中文分詞 :https: ...
  • 1. 新建項目 項目名稱:MFCBaseMessage 2. 選擇基本對話框模式,如圖 ,點擊完成3. 最終如圖 4.右鍵添加類嚮導<!--StartFragment --> 5.添加滑鼠事件 6.在ON_LButtonDown添加如下代碼: 7。查看效果 8.模擬發送事件 9.查看效果 ...
  • Git分支管理簡介 幾乎每一種版本控制系統都以某種形式支持分支。使用分支意味著你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。 有人把 Git 的分支模型稱為"必殺技特性",而正是因為它,將 Git 從版本控制系統家族裡區分出來。 創建分支命令: git branch (branchna ...
  • Git 的工作就是創建和保存你項目的快照及與之後的快照進行對比,簡單的說Git就是源代碼管理工具。下麵是工作中經常用到的簡單的Git命令,如有不足,希望提出交流,謝謝。 一.獲取與創建項目命令 1.git init 用 git init 在目錄中創建新的 Git 倉庫。 你可以在任何時候、任何目錄中 ...
  • 理解I2C設備驅動框架,主要圍繞四個結構體去分析就容易了。 struct i2c_algorithm:提供I2C協議的實現的操作,如:master_xfer實現數據收發的最基本方法。 struct i2c_adapter:每一個i2c_adapter都代表一個I2C物理介面,一個cpu可以有多個I2 ...
  • 一、MSMQ是什麼 Message Queuing(MSMQ) 是微軟開發的消息中間件,可應用於程式內部或程式之間的非同步通信。主要的機制是:消息的發送者把自己想要發送的信息放入一個容器中(我們稱之為Message),然後把它保存至一個系統公用空間的消息隊列(Message Queue)中;本地或者是 ...
  • /* * (un)comment correct payload first (x86 or x64)! * * $ gcc cowroot.c -o cowroot -pthread * $ ./cowroot * DirtyCow root privilege escalation * Back ...
  • 版權聲明:本文發佈於http://www.cnblogs.com/yumiko/,版權由Yumiko_sunny所有,歡迎轉載。轉載時,請在文章明顯位置註明原文鏈接。若在未經作者同意的情況下,將本文內容用於商業用途,將保留追究其法律責任的權利。如果有問題,請以郵箱方式聯繫作者(793113046@q ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...