Linux grep 命令

grep 是 Linux/Unix 系統中用于文本搜索的強大工具,支持基于正則表達式的模式匹配。以下是其詳細用法及實際應用示例:


基本語法

grep [選項] 模式 [文件...]
  • 模式:要搜索的字符串或正則表達式。
  • 文件:可以是單個文件或多個文件,也可以通過管道符傳遞輸入。

常用選項

選項功能
-i忽略大小寫(如 grep -i "hello" file 匹配 helloHELLO
-v反向匹配(顯示不包含模式的行)
-n顯示匹配行的行號
-l僅顯示包含匹配項的文件名
-c統計匹配行的數量
-r / -R遞歸搜索目錄中的文件(-R 不跟隨符號鏈接)
-w全字匹配(如 -w "error" 不匹配 error123
-x匹配整行(如 -x "apple" 只匹配整行 apple
-A NUM顯示匹配行及其后 NUM
-B NUM顯示匹配行及其前 NUM
-C NUM顯示匹配行及前后各 NUM
-H顯示文件名(多文件時默認開啟)
-m NUM最多顯示 NUM 個匹配項
-q靜默模式(僅返回狀態碼,0 表示匹配成功)
-E使用egrep命令
-color = auto為grep過濾結果添加顏色

正則表達式

grep 支持 基本正則表達式(BRE)擴展正則表達式(ERE)

  1. 基本正則表達式(BRE)【默認支持】

    • .:匹配任意單個字符

      grep "a.b" file.txt  # 匹配 "aab"、"acb" 等
      
    • *:匹配前一個字符 0 次或多次

      grep "go*gle" file.txt  # 匹配 "ggle"、"google" 等
      
    • ^:匹配行首

      grep "^start" file.txt  # 匹配以 "start" 開頭的行
      
    • $:匹配行尾

      grep "end$" file.txt  # 匹配以 "end" 結尾的行
      
  2. 擴展正則表達式(ERE)

    • |:邏輯“或”

      grep -E "error|fail" log.txt  # 匹配 "error" 或 "fail"
      
    • +:匹配前一個字符 1 次或多次

      grep -E "go+gle" file.txt  # 匹配 "gogle"、"google" 等
      
    • ?:匹配前一個字符 0 次或 1 次

      grep -E "colou?r" file.txt  # 匹配 "color" 或 "colour"
      
    • {n,m}:匹配前一個字符 nm

      grep -E "a{2,4}" file.txt  # 匹配 "aa"、"aaa" 或 "aaaa"
      
  3. 字符集合

    • [abc]:匹配任意一個字符(a、b 或 c)

      grep "[0-9]" file.txt  # 匹配任意數字
      
    • [^abc]:匹配不在集合中的字符

      grep "[^0-9]" file.txt  # 匹配非數字字符
      

擴展知識BRE、ERE

BRE(基本正則表達式)
  • 支持的元字符^(行首)、$(行尾)、.(任意單個字符)、*(零次或多次匹配)、[](字符集)、\{m,n\}(重復次數)。

  • 需要轉義的元字符

    • ():需要轉義為 \(...\) 才能表示分組。
    • {}:需要轉義為 \{m,n\} 才能指定重復次數。
    • |:需要轉義為 \| 才能表示“或”操作。
  • 示例

    # 匹配以 "error" 開頭的行(BRE)
    grep '^error' /var/log/syslog# 匹配連續 3 到 5 個數字(BRE)
    grep '[0-9]\{3,5\}' /var/log/syslog
    
ERE(擴展正則表達式)
  • 支持的元字符:BRE 的所有元字符,外加以下擴展:

    • +:前一個字符出現 1 次或多次
    • ?:前一個字符出現 0 次或 1 次
    • {m,n}:前一個字符出現 m 到 n 次(無需轉義)。
    • ():分組(無需轉義)。
    • |:邏輯“或”操作(無需轉義)。
  • 無需轉義+?{}()|

  • 示例

    # 匹配 "error" 或 "fail"(ERE)
    grep -E 'error|fail' /var/log/syslog# 匹配連續 3 到 5 個數字(ERE)
    grep -E '[0-9]{3,5}' /var/log/syslog
    

高級用法

  1. 遞歸搜索

    grep -r "error" /var/log/  # 在 /var/log 目錄及其子目錄中搜索 "error"
    
  2. 統計匹配行數

    grep -c "success" file.txt  # 統計 file.txt 中包含 "success" 的行數
    
  3. 顯示上下文

    grep -A 2 -B 1 "keyword" file.txt  # 顯示匹配行、前1行和后2行
    
  4. 多模式匹配

    grep -e "pattern1" -e "pattern2" file.txt  # 同時搜索 pattern1 和 pattern2
    
  5. 排除特定文件類型

    grep --include="*.log" "error" /path/  # 僅搜索 .log 文件
    grep --exclude="*.tmp" "error" /path/   # 排除 .tmp 文件
    
  6. 高亮匹配內容

    grep --color=auto "keyword" file.txt  # 匹配內容高亮顯示
    

常見場景示例

  1. 忽略大小寫搜索

    grep -i "linux" file.txt  # 匹配 "Linux"、"LINUX" 等
    
  2. 查找不包含某字符串的行

    grep -v "skip" file.txt  # 顯示不包含 "skip" 的行
    
  3. 統計匹配行數

    grep -c "404" access.log  # 統計日志中 404 錯誤的數量
    
  4. 遞歸搜索并顯示文件名

    grep -rl "TODO" /project/  # 列出 /project/ 中包含 "TODO" 的文件名
    
  5. 使用正則表達式

    grep -E "^#include" file.c  # 匹配以 #include 開頭的行
    grep -o "\b[0-9]\+\b" file.txt  # 僅輸出所有獨立的數字
    

egrep核心區別

特性grepegrep
正則表達式類型基本正則表達式 (BRE)擴展正則表達式 (ERE)
性能更快(處理簡單模式)稍慢(處理復雜模式)
語法靈活性需要轉義特殊字符(如 |, \+直接使用特殊字符(如 `
系統兼容性所有 Unix/Linux 系統均支持部分系統(如 macOS)可能不預裝
等效命令grep(默認)grep -E(與 egrep 等效)

簡單總結

  • grep:適合簡單模式匹配,兼容性更好,性能更高。
  • egrep:適合復雜模式匹配,語法更簡潔,但性能稍遜。
  • 在實際使用中,如果需要擴展正則表達式功能,推薦使用 grep -E(等效于 egrep),這樣可以避免系統兼容性問題。

注意事項

  • 擴展正則表達式:使用 egrepgrep -E 啟用更靈活的正則語法(如 +?() 分組)。
  • 搜索結果太多:分頁查看:grep "pattern" file.txt | less
  • 性能優化:搜索大文件時,使用 -m 限制匹配數量或 --binary-files=without-match 跳過二進制文件。
  • 幫助文檔:通過 man grep 查看完整選項列表和詳細說明。

如果有意見和或者建議歡迎留言討論!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83994.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83994.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83994.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle 11g通過rman做備份和還原

ORACLE RMAN增量備份完整恢復測試 1.創建測試環境: 1.1.創建測試表空間 SQL> create tablespace tablespace1 datafile ‘/data/u01/app/oracle/oradata/orcl/tablespace1.dbf’ size 10m; SQL> 1.2.創建測試用戶并指定為默認表空間: SQL> create user user1 iden…

為什么TCP有粘包問題,而UDP沒有

TCP粘包問題源于其面向字節流的設計,而UDP無此問題因其基于數據報的傳輸機制。 🔍 一、TCP粘包問題的原因 字節流傳輸特性 TCP將數據視為連續的字節流,而非獨立的消息包。發送端多次寫入的小數據可能被合并為一個TCP段發送;接收端…

ELM:Embodied Understanding of Driving Scenarios

1. ELM 的創新點與核心思路 ELM 的核心在于 “具身理解”(Embodied Understanding),即通過常識與環境交互并進行推理,這一理念適用于自動駕駛車輛、機器人和無人機等多種應用場景。具身智能體(Embodied Agent)需具備四大核心能力:首先,它能夠描述周圍環境,對交通物體的…

實景VR知識科普

實景VR的定義與技術特點 實景VR,即基于真實場景的虛擬現實技術,是通過計算機生成的三維環境,旨在模擬并再現真實世界場景。用戶佩戴VR設備(如VR頭盔、手柄等)后,能夠沉浸在一個高度仿真的虛擬環境中&#…

CppCon 2016 學習:ITERATOR HAIKU

這組幻燈片講解了 C 中**范圍(Ranges)和迭代器(Iterators)**的核心概念,特別是 C14 標準定義的五種迭代器類別,以及范圍的基本使用方式。我幫你理個思路: 1. RANGE-SEQUENCE: 元素范圍&#xf…

開源飛控fmt軟件在環仿真環境搭建

tags: 飛控 fmt開發環境搭建 fmt是國產開源飛控,特點是支持基于模型設計(基于simulink仿真),源碼結構目錄較清晰,項目體積較小。 此項目操作系統選擇的是國產實時操作系統rt-thread,也是開源項目。&#…

如何通過AI測試平臺實現自動化缺陷檢測和優化

在數字化轉型加速的今天,軟件質量保證已成為企業競爭力的關鍵要素之一。傳統的手工測試方法面臨著效率低下、成本高昂和覆蓋面有限等挑戰,而AI技術的融入為軟件測試領域帶來了革命性的變化。本文將深入探討如何構建一個完整的AI測試平臺,實現…

使用JeecgBoot配置

Jeecg 使用方法 本文以在環境配置好的前提下進行講解 如果不會配置環境 可在billbill網站的Jeecg官網搜索環境配置 第一步 打開redis,redis是一個服務,需要用命令行打開 且命令行不能關 不能實現一勞永逸效果 每次關閉都得重新打開一次。 第二步 啟動j…

NodeJS:版本及對應時間并對應的npm版本

versionltsrelease dateenginenpmnode下載更新日志文檔Node.js 24.0.1?2025-05-0813.61--下載更新日志文檔Node.js 22.12.0?2024-12-03---下載更新日志文檔Node.js 21.2.0 2023-11-1411.8.172.1710.2.3120下載更新日志文檔Node.js 20.10.0?2023-11-2211.3.244.810.2.3115下載…

UI前端大數據處理:應對海量數據的挑戰與策略

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化轉型的深水區,全球每日產生的數據量已突破 500EB,相當于 10 億…

對微服務的了解

微服務是一種架構風格,我們可以把應用程序劃分為一組小型的、松散耦合的服務, 每個服務都運行在自己的進程中,并通過輕量級的通信機制進行通信, 每個服務都是獨立部署、獨立擴展、獨立更新的,從而提高了應用程序的可伸…

計算機視覺生物啟發視覺算法:如何模擬人眼與大腦?

計算機視覺生物啟發視覺算法:如何模擬人眼與大腦? 一、前言二、人眼與大腦視覺系統基礎概念?2.1 人眼的生理結構與功能?2.2 大腦視覺皮層的信息處理機制?三、生物啟發視覺算法的核心技術?3.1 視網膜啟發的特征提取算法?3.2 視覺皮層啟發的分層特征學習算法?3.3 注意力機…

stm32使用定時器功能之高精度定時(微秒級)、輸入捕獲以及超聲波測距

一、定時器功能之高精度定時(微秒級) 我們常用的延時函數中無論是HAL_Delay還是vTaskDelay()函數都是毫秒級的定時,我們可以借助定時器實現一個微秒級更高精度的延時函數。這個定時器不會影響FreeRtos的任務切換 這里就是用定時器的計數功能…

Git常用命令摘要

寫這篇博文的目的只是簡單的給自己及團隊的日常工作中需要用到的git命令作個匯總,這樣平時只需要查閱這篇文章就夠了,不用到處查找。如果能給有需要的朋友一點點的幫助,那也算是意外之喜吧。 一、基礎配置 # 設置用戶名和郵箱(首…

ubuntu 22.04 安裝部署kibana 7.10.0詳細教程

安裝部署kibana 7.10.0詳細教程 下載并安裝二、修改kibana.yml文件三、性能配置四、啟動服務驗證五、安裝啟動常見問題 【背景】 整個elk安裝是基于ubuntu 22.04和jdk 11環境。kibana均采用 *.deb方式安裝,需要服務器能聯網。ubuntu 22.04 安裝部署elk(elasticsearc…

nfs 服務器的搭建

nfs 服務器的搭建 1.配置yum源 mkdir /etc/yum.repos.d/bak mv /etc/yum.repo.d/*.repo /etc/yum.repos.d/bak/ curl -o /etc/yum.repos.d/centos.repo http://10.26.210.101/centos/centos.repo # 外網 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.c…

Yii2 基礎版實現 Token 認證 API 服務的完整框架方案

以下是一個基于 Yii2 基礎版實現 Token 認證 API 服務的完整框架方案,包含 JWT 實現和完整代碼: 1. 環境準備 composer create-project --prefer-dist yiisoft/yii2-app-basic yii2-api cd yii2-api2. 安裝必要擴展 composer require firebase/php-jw…

主流版本控制工具Git vs Perforce P4:架構模式、性能、大文件管理及分支管理對比詳解

Git和Perforce P4是兩個強大的源代碼管理工具,各有其獨特的功能優勢與適用場景。 本文中,Perforce中國授權合作伙伴-龍智將從架構設計、性能表現、文件管理及分支策略等維度,為您詳細解析兩者的關鍵差異,幫助您根據團隊需求&…

文件系統2(Linux下)

1 掛載分區 文件系統1中已經知道了能夠根據inode號在指定分區找文件了,也已經能根據目錄文件內容,找指定的inode了,在指定的分區內,就可以對文件進行操作了。但是還有幾個問題,那就是inode是不能跨分區的,…

Leetcode-?2537. 統計好子數組的數目?

Problem: 2537. 統計好子數組的數目 思路 滑動窗口 解題過程 思路: 使用滑動窗口來維護子數組,并通過組合計數動態調整滿足條件的數對數目。具體來說,我們維護一個窗口[l,r],使得窗口內相同元素的對數至少為 k,并計算…