shell編程之grep命令的使用

来源:http://www.cnblogs.com/chengnanlangzi/archive/2017/06/03/6937580.html
-Advertisement-
Play Games

大家在學習正則表達式之前,首先要明確一點,並把它牢牢記在心裡,那就是: 在linux中,通配符是由shell解釋的,而正則表達式則是由命令解釋的,不要把二者搞混了。切記!!! 通常有三種文本處理工具/命令:grep、sed、awk,它們三者均可以解釋正則。下麵我就為大家介紹grep命令的使用方法。 ...


大家在學習正則表達式之前,首先要明確一點,並把它牢牢記在心裡,那就是:

在linux中,通配符是由shell解釋的,而正則表達式則是由命令解釋的,不要把二者搞混了。切記!!!

通常有三種文本處理工具/命令:grep、sed、awk,它們三者均可以解釋正則。下麵我就為大家介紹grep命令的使用方法。

 

一、使用grep命令搜索文件中的內容

grep和egrep命令能夠在一個或多個文件的內容中搜索某一特定的字元模式,也被稱為正則表達式(regular expressions)。一個模式可以是一個單一的字元、一個字元串、一個單詞或一個句子。

一個正則表達式是描述一組字元串的一個模式。正則表達式的構成是模仿了數學表達式,通過使用操作符將較小的表達式組合成一個新的表達式。一個正則表達式既可以是一些純文本文字,也可以是用來產生模式的一些特殊字元。為了進一步定義一個搜索模式,grep命令支持以下幾種正則表達式的元字元,也稱通配符。

ps:正則表達式語言由兩種基本字元類型組成:原義(正常)文本字元和元字元。元字元使正則表達式具有處理能力。所謂元字元就是指那些在正則表達式中具有特殊意義的專用字元,可以用來規定其前導字元(即位於元字元前面的字元)在目標對象中的出現模式。

c*:將匹配0個或多個字元c

.:將匹配任何一個且只能是一個字元(換行符除外)

[xyz]:將匹配方括弧中的任意一個字元

[^xyz]:將匹配不包括方括弧中的字元的所有字元

^:鎖定行的開頭

$:鎖定行的結尾

在基本正則表達式中,如元字元*、+、{}、|、和()已經失去了它們原來的意義,如果要回覆他們原本的含義要在之前冠以反斜線\,如\*、\+等。

grep命令是用來在每一個文件中或標準輸出上搜索特定的模式。當使用grep命令時,包含一個指定字元模式的每一行都會被列印在屏幕上,grep命令的語法格式如下:

grep 選項 模式 文件名

其中,選項可以改變grep命令的搜索方式,除了-w選項外,其他的每個選項都可以在egrep和fgrep命令中使用。grep命令常用選項如下:

-c(count):僅列出包含模式的行數

-i(ignore):忽略模式中字母大小寫

-l(list):列出帶有匹配行的文件名

-n:在匹配行的前面列出行號

-v:列出沒有匹配模式的行(取反)

-w:把表達式當做一個完整的單字來搜索,忽略那些部分匹配的行

-q  :靜默模式,沒有任何輸出,得用$?來判斷執行成功沒有,即有沒有過濾到想要的內容

-A n  :如果匹配成功,則將匹配行及其後n行一起列印出來

-B n  :如果匹配成功,則將匹配行及其前n行一起列印出來

-C n  :如果匹配成功,則將匹配行及其前後n行一起列印出來

ps:如果搜索的是多個文件,grep命令的結果只顯示在文件中發現匹配模式的文件名;

      如果搜索的是單個文件,grep命令的結果將顯示每一個包含匹配模式的行。

 

上面就是grep命令的基本使用方法。但是有時一個簡單的正則表達式無法定位你要搜索的內容,如要搜索同時滿足模式一和模式二的數據行,這時egrep命令就可以派上用場。

egrep命令的語法格式和grep命令相同。但是egrep命令是用來在一個或多個文件的內容中利用擴展的正則表達式的元字元搜索特定的模式。擴展的正則表達式的元字元包含了grep命令中使用的正則表達式元字元的同時,還增加了一些額外的元字元,大致有下麵幾個:

+:匹配一個或多個前導字元

a|b:匹配a或b

(RE):匹配括弧中的正則表達式RE

 

下麵我將通過一些基本的例子來增進大家對grep和egrep命令用法的瞭解。鑒於grep命令中所有的選項egrep都能夠使用(egrep更加強大),為方便起見我將使用egrep命令為大家演示:

例一:顯示出文件/etc/passwd含有root的行

 

例二:輸出/etc/passwd中任何包含bash的所有行,還要輸出緊接著這行的上下各兩行的內容

 

例三:顯示出/etc/passwd中有多少行含有nologin

 

例四:顯示出/etc/passwd中那些行含有root,並將行號一塊輸出

 

例五:

新建用戶abominable、abominate、anomie、atomize,編寫正則表達式,將他們匹配出來

 

 

例六:新建用戶Alex213sb、Wpq2222b、yH438PIG、egon666、egon過濾出用戶名組成是字母+數字+字母的行

 

例七:顯示出/etc目錄下所有包含root的文件名

 

例八:過濾掉/etc/ssh/sshd_config內所有註釋和所有空行

 

以上例子只是很小的一部分,大家只要勤加練習,一定很快就能掌握grep命令的使用啦 ^^

 


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

-Advertisement-
Play Games
更多相關文章
  • 方法一: 進入Win10桌面,按下“Win+R”快捷鍵打開運行命令,在運行框中輸入“gpedit.msc”後回車; 在彈出的本地組策略編輯器對話框左側依次點擊【電腦配置】→【Windows設置】→【安全設置】→【本地策略】→【安全選項】下,在右側找到【用戶賬戶控制:用於內置管理員賬戶的管理員批准模 ...
  • 定期備份越來越多,需要刪除部分過期的文件,可以使用forfiles進行操作。文本將結束forfiles的簡單使用方法。 ...
  • 在機房折磨很久弄好的自己 Mark 一下。(測試環境rhel5.5) vnc 之獨立服務配置 步驟1: (1)查看系統是否安裝vnc服務(也可以在 系統-管理員-服務 里查看並勾選開機自啟) (如果有返回值,類似於vnc-server的值,說明已經安裝了vnc-server此步驟就可跳過。) (2) ...
  • 1、創建到目標板相關文件的鏈接 ln -s asm-arm asm ln -s arch-s3c24x0 asm-arm/arch ln -s proc-armv asm-arm/proc 2、創建include/config.mk文件,內容如下: ARM = arm CPU = arm920t B ...
  • 失敗原因: 1.telnet包未安裝,檢查telnet包是否安裝: 表示已安裝 2.telnet包已安裝,telnet-server未安裝,檢查telnet-server包是否安裝: 表示已安裝 3.telnet配置文件問題: 將disable對應的值修改為no或者註釋該行並重啟xinetd守護進程 ...
  • 一、BIOS更改 首先來bios更改:我們知道,uefi+gpt引導雖然出來的時間比較長,但是win7還不能完全的支持,所以在使用uefi+gpt安裝win7的時候就會出現各種錯誤!所以我們在安裝Windows 7的時候,不能把BIOS設置為“純UEFI”,並且必須禁用“Secure Boot”。下 ...
  • 一、Samba服務 Samba服務主要用於Linux伺服器給Windows用戶分享文件用 配置伺服器都需要以下5步操作 1.準備環境 1)關閉防火牆 systemctl stop firewalld 2)臨時關閉selinux sentenforce 0 或者在配置文件中永久關閉selinux vi ...
  • 分享一個由於KDE未被正確安裝導致ubuntu 無法用ssh正常訪問的問題解決過程 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...