Linux 查找特定字符詳細講解

CentOS 7 中使用 grep 查找特定字符詳細筆記?

一、grep 命令概述?

grep 全稱為 Global Regular Expression Print,即全局正則表達式打印,是 CentOS 7 系統中用于文本搜索的核心工具。它基于正則表達式或固定字符串,在文件、標準輸入流中進行模式匹配,并輸出符合條件的行。其本質是通過掃描文本內容,將每一行與指定模式對比,一旦匹配成功就輸出該行。?

二、grep 命令語法結構詳解?

grep 的基本語法為:?

?

TypeScript

取消自動換行復制

grep [選項] "搜索模式" [文件名或目錄]?

?

其中,[選項]用于調整搜索行為,"搜索模式"是待匹配的字符、字符串或正則表達式,[文件名或目錄]指定搜索范圍。若省略文件名,grep 會從標準輸入(如管道傳入的數據)讀取內容進行搜索。?

三、常用選項深度解析?

?

選項?

全稱?

功能描述?

示例及說明?

-i?

--ignore-case?

忽略大小寫匹配,使搜索不區分字符的大小寫形式?

查找包含 “Linux” 或 “linux” 的行:grep -i "linux" file.txt,會同時匹配Linux is great和linux kernel等行?

-v?

--invert-match?

反向匹配,輸出不包含指定模式的行?

從日志文件中排除包含 “success” 的行:grep -v "success" log.txt,常用于過濾掉已知的正常信息,聚焦異常數據?

-n?

--line-number?

顯示匹配行的行號,方便定位文本位置?

查找配置文件中包含 “database” 的行及其行號:grep -n "database" config.ini,輸出格式如5:database = mysql,便于快速定位到文件第 5 行?

-c?

--count?

僅統計匹配行數,不輸出具體內容,適用于統計匹配數量場景?

統計日志中出現 “error” 的次數:grep -c "error" system.log,返回一個數字,直觀展示錯誤發生頻率?

-l?

--files-with-matches?

列出包含匹配內容的文件名,可用于批量篩選文件?

在目錄中查找包含 “important” 的文件:grep -rl "important" /home/user/documents,遞歸搜索目錄下所有文件并列出文件名?

-L?

--files-without-match?

列出不包含匹配內容的文件名,與-l功能相反?

找出目錄中不包含 “temp” 的文件:grep -rL "temp" /var/tmp,方便清理無用文件?

-r 或 -R?

--recursive?

遞歸搜索指定目錄下的所有文件,包含子目錄中的文件?

搜索/etc目錄下所有配置文件中包含 “network” 的內容:grep -r "network" /etc/,常用于在大型目錄樹中查找特定配置項?

-w?

--word-regexp?

匹配完整單詞,通過單詞邊界(\b)判斷,避免部分匹配?

查找包含 “user” 但不包含 “username” 的行:grep -w "user" users.txt,確保只匹配獨立的 “user” 單詞?

-E?

--extended-regexp?

使用擴展正則表達式,簡化部分復雜語法,等價于egrep?

匹配以 “http” 或 “https” 開頭的 URL:grep -E "^http(s)?://" urls.txt,相比基本正則表達式,無需對?等字符轉義?

-F?

--fixed-strings?

按固定字符串匹配,不解析正則表達式,效率更高?

查找包含固定字符串 “example.com” 的行:grep -F "example.com" domains.txt,適用于已知字符串,無需正則解析的場景?

-o?

--only-matching?

僅輸出匹配的字符串本身,而非整行內容?

提取文本中所有郵箱地址:grep -oE "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" emails.txt,只返回郵箱字符串,便于數據提取?

?

四、基礎使用場景與示例?

1. 簡單字符串匹配?

場景:在文件test.txt中查找包含字符串 “hello world” 的行。?

?

TypeScript

取消自動換行復制

grep "hello world" test.txt?

?

執行邏輯:grep 逐行讀取test.txt,將每一行內容與 “hello world” 對比,若完全匹配則輸出該行。若文件內容為:?

?

TypeScript

取消自動換行復制

This is a test line.?

hello world, welcome!?

Another line without match.?

?

則輸出結果為:hello world, welcome!?

2. 忽略大小寫匹配?

場景:在代碼文件中查找包含 “class” 或 “Class” 的行。?

?

TypeScript

取消自動換行復制

grep -i "class" code.php?

?

對比說明:若不使用-i選項,grep "class" code.php只會匹配小寫 “class”,而-i選項使搜索同時匹配class MyClass和Class AnotherClass等大小寫不同的行。?

3. 反向匹配(排除特定內容)?

場景:從系統進程列表中排除包含 “sshd” 的進程信息。?

?

TypeScript

取消自動換行復制

ps -ef | grep -v "sshd"?

?

原理:先通過ps -ef獲取所有進程信息,再由grep -v過濾掉包含 “sshd” 的行,常用于排查除特定進程外的其他進程狀態。?

4. 顯示行號?

場景:在配置文件nginx.conf中查找包含 “server_name” 的行及其行號。?

?

TypeScript

取消自動換行復制

grep -n "server_name" nginx.conf?

?

輸出示例:?

?

TypeScript

取消自動換行復制

12:server_name example.com;?

25:server_name www.example.com;?

?

方便管理員快速定位到配置文件的具體位置進行修改。?

5. 統計匹配行數?

場景:統計日志文件access.log中包含 “404” 錯誤狀態碼的請求數量。?

?

TypeScript

取消自動換行復制

grep -c "404" access.log?

?

應用價值:通過返回的數字,可直觀了解網站當天或某個時間段內出現 404 錯誤的頻率,輔助進行故障排查和優化。?

五、進階用法:正則表達式深度剖析?

grep 支持基本正則表達式(BRE)和擴展正則表達式(ERE,通過-E選項啟用),以下是常見元字符及用法示例:?

1. 基本正則表達式(BRE)?

匹配任意單個字符(.)?

場景:查找文件名中包含 “a.xxx” 格式的行(如 “a.txt”、“a.log”)。?

?

TypeScript

取消自動換行復制

grep "a..*" files.list?

?

解析:.匹配任意單個字符,.*表示匹配零個或多個任意字符。若files.list內容為:?

?

TypeScript

取消自動換行復制

a.txt?

b.log?

a.pyc?

?

則輸出a.txt和a.pyc兩行,因為它們以 “a.” 開頭。?

匹配字符范圍([])?

場景:查找包含數字或小寫字母的行。?

?

TypeScript

取消自動換行復制

grep "[0-9a-z]" text.txt?

?

原理:[0-9a-z]表示匹配 0-9 的數字或 a-z 的小寫字母中的任意一個字符,只有包含這些字符的行才會被輸出。?

匹配單詞邊界(\< 和 \>)?

場景:僅匹配完整單詞 “user”,排除 “username”“user123” 等包含該字符串的行。?

?

TypeScript

取消自動換行復制

grep "\<user\>" users.txt?

?

對比測試:若不使用單詞邊界,grep "user" users.txt會同時匹配user account、username is等行,而\<user\>確保只匹配獨立的 “user” 單詞。?

2. 擴展正則表達式(ERE,-E 選項)?

匹配可選字符(?)?

場景:匹配 “http” 或 “https” 開頭的 URL。?

?

TypeScript

取消自動換行復制

grep -E "^http(s)?://" urls.txt?

?

解釋:^表示行首,(s)?表示 “s” 字符可選(出現 0 次或 1 次),相比基本正則表達式^http\(s\)?://,擴展正則表達式無需對括號和問號轉義,語法更簡潔。?

匹配重復字符(+ 和 *)?

場景:提取文本中連續的數字字符串(如電話號碼、金額)。?

?

TypeScript

取消自動換行復制

grep -oE "[0-9]+" numbers.txt?

?

區別:+表示匹配一個或多個前面的字符(此處為數字),*表示匹配零個或多個,例如[0-9]*會匹配空字符串或數字串。?

六、遞歸搜索目錄的應用與技巧?

1. 遞歸搜索當前目錄下所有文件?

場景:在項目代碼目錄/home/user/project中查找包含 “TODO” 注釋的所有代碼文件。?

?

TypeScript

取消自動換行復制

grep -r "TODO" /home/user/project?

?

執行過程:grep 會遍歷/home/user/project目錄及其子目錄下的所有文件,對每個文件執行搜索操作,輸出所有包含 “TODO” 的行及文件名和行號。?

2. 遞歸搜索并僅列出文件名?

場景:查找/var/log目錄中包含 “error” 的日志文件列表。?

?

TypeScript

取消自動換行復制

grep -rl "error" /var/log?

?

優勢:相比輸出所有匹配行,-l選項僅列出文件名,方便后續批量處理文件,如統一壓縮或備份包含錯誤信息的日志文件。?

3. 遞歸搜索并排除特定文件類型?

場景:在目錄中查找包含 “config” 的文件,但排除.log文件。?

?

TypeScript

取消自動換行復制

grep -r "config" /path/to/dir/ | grep -v "\.log$"?

?

組合技巧:通過管道將遞歸搜索結果傳遞給第二個grep,利用-v反向匹配排除以 “.log” 結尾的行,實現精準篩選。?

七、結合管道(|)與其他命令的高級應用?

1. 過濾進程信息?

場景:查找正在運行的apache2進程,同時排除grep自身進程。?

?

TypeScript

取消自動換行復制

ps -ef | grep apache2 | grep -v grep?

?

原理:第一個grep篩選出包含 “apache2” 的進程信息,第二個grep排除包含 “grep” 的行(即grep命令自身的進程),確保結果僅為真實的apache2進程。?

2. 統計唯一匹配項數量?

場景:統計日志中出現的不同 IP 地址數量。?

?

TypeScript

取消自動換行復制

grep "IP:" access.log | awk '{print $2}' | sort -u | wc -l?

?

分步解析:?

  1. grep "IP:" access.log提取包含 “IP:” 的行;?
  1. awk '{print $2}'通過 awk 命令提取每行的第二個字段(假設 IP 地址在第二列);?
  1. sort -u對 IP 地址進行排序并去重;?
  1. wc -l統計去重后的 IP 地址行數,得出唯一 IP 數量。?

3. 文本預處理與篩選?

場景:從系統服務列表中提取正在運行的服務名稱。?

?

TypeScript

取消自動換行復制

systemctl list-units --type=service | grep "active" | awk '{print $1}'?

?

流程:先獲取所有服務單元信息,再篩選出狀態為 “active” 的服務行,最后提取服務名稱字段,便于監控系統服務狀態。?

八、注意事項與常見問題解決方案?

1. 正則表達式轉義問題?

問題:使用基本正則表達式時,對$、*、+等特殊字符未轉義導致匹配失敗。?

解決方案:對特殊字符添加反斜杠\進行轉義,例如匹配以數字結尾的行應使用grep "[0-9]\$" file.txt。若使用擴展正則表達式(-E),部分字符無需轉義,可簡化語法。?

2. 大文件處理性能瓶頸?

問題:搜索超大文件(如 GB 級日志)時,命令執行緩慢甚至卡死。?

解決方案:?

  • 盡量縮小搜索范圍,指定具體文件名而非目錄;?
  • 使用-m選項限制匹配行數(如grep -m 100 "error" huge.log,找到 100 個匹配行后停止);?
  • 結合split命令將大文件分割成小文件后再搜索。?

3. 目錄權限不足?

問題:普通用戶遞歸搜索系統目錄(如/etc)時提示權限不足。?

解決方案:使用sudo獲取管理員權限,如sudo grep -r "network" /etc/,或聯系管理員調整文件權限。?

4. 正則表達式復雜度過高?

問題:復雜正則表達式導致匹配邏輯錯誤或效率低下。?

解決方案:?

  • 將復雜表達式拆分為多個簡單步驟,通過管道組合;?
  • 使用在線正則表達式測試工具(如regex101.com)驗證表達式正確性;?
  • 優先使用固定字符串匹配(-F選項)替代復雜正則,提高性能。?

九、命令行快捷鍵與效率提升技巧?

  1. 歷史命令調用:使用Arrow Up和Arrow Down箭頭鍵在命令歷史中上下滾動,快速找回之前執行過的grep命令;也可通過Ctrl + R輸入關鍵字搜索歷史命令。?
  1. 命令補全:按Tab鍵自動補全文件名或目錄名,減少手動輸入,尤其在長路徑或復雜文件名場景下。?
  1. 快速終止:當搜索耗時過長或需中斷時,按Ctrl + C強制終止grep進程。?
  1. 后臺運行:對于耗時較長的遞歸搜索任務,可使用&符號將命令放入后臺運行(如grep -r "pattern" /large/dir/ &),并通過jobs命令查看后臺任務狀態,fg命令將任務切換到前臺。?

這份筆記全面覆蓋了 CentOS 7 中 grep 命令的使用。若你在實際操作中遇到特定問題,或想了解某類復雜場景的處理,歡迎隨時和我分享。

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

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

相關文章

uniappx插件nutpi-idcard 開發與使用指南(適配鴻蒙)

uniappx插件nutpi-idcard 開發與使用指南&#xff08;適配鴻蒙&#xff09; 前言 nutpi-idcard 是一個基于 UTS (uni-app TypeScript Syntax) 開發的 uni-app 插件適配鴻蒙&#xff0c;主要用于解析身份證號碼&#xff0c;提取其中的關鍵信息&#xff0c;如地區、出生日期、性…

Grafana-ECharts應用講解(玫瑰圖示例)

工具: MySQL 數據庫 MySQL Workbench 數據庫管理工具(方便編輯數據) Grafana v11.5.2 Business Charts 6.6(原 Echarts插件) 安裝 安裝 MySQL社區版安裝 MySQL Workbench安裝 Grafana在 Grafana 插件中搜索 Business Charts 進行安裝以上安裝步驟網上教程很多,自行搜…

React狀態管理Context API + useReducer

在 React 中&#xff0c;Context API useReducer 是一種輕量級的狀態管理方案&#xff0c;適合中小型應用或需要跨組件共享復雜狀態的場景。它避免了 Redux 的繁瑣配置&#xff0c;同時提供了清晰的狀態更新邏輯。 1. 基本使用步驟 (1) 定義 Reducer 類似于 Redux 的 reduce…

3 個優質的終端 GitHub 開源工具

1、Oh My Zsh Oh My Zsh 是一個幫助你管理和美化 zsh 終端的開源工具。它讓你的終端更炫酷、更高效。安裝后&#xff0c;你可以快速使用各種插件和主題&#xff0c;比如常見的 git 命令簡化、支持多種編程語言工具等&#xff0c;每次打開終端都會有驚喜。無論你是開發者還是普…

無人機巡檢智能邊緣計算終端技術方案??——基于EFISH-SCB-RK3588工控機/SAIL-RK3588核心板的國產化替代方案?

一、方案核心價值? ?實時AI處理?&#xff1a;6TOPS NPU實現無人機影像的實時缺陷檢測&#xff08;延遲&#xff1c;50ms&#xff09;?全國產化?&#xff1a;芯片、操作系統、算法工具鏈100%自主可控?極端環境適配?&#xff1a;-40℃~85℃穩定運行&#xff0c;IP65防護等…

SpringAI 1.0.0 正式版——利用Redis存儲會話(ChatMemory)

官方文檔&#xff1a;Chat Memory :: Spring AI Reference 1. 引言 SpringAI 1.0.0 改動了很多地方&#xff0c;本文根據官方的InMemoryChatMemoryRepository實現了自定義的RedisChatMemoryRepository&#xff0c;并使用MessageWindowChatMemory創建ChatMemory 2. 實現 2.1.…

RFC8489-STUN

0. 學習參考 RFC5389 中文翻譯 中文RFC RFC文檔 RFC翻譯 RFC中文版 RFC 5389&#xff1a;NAT 的會話遍歷實用程序 &#xff08;STUN&#xff09; --- RFC 5389: Session Traversal Utilities for NAT (STUN) 1. RFC 3489的演變 自 RFC 3489 發布以來的經驗發現&#xff0c;…

開始在本地部署自己的 Gitea 服務器

0.簡介 在軟件開發和團隊協作中&#xff0c;代碼管理是至關重要的環節。筆者一直使用gitblit管理自己的倉庫。然鵝&#xff0c;這個軟件已經很久沒有更新了。經過多方考察&#xff0c;發現Gitea 是一款輕量級的開源代碼托管平臺&#xff0c;具有易于部署、資源占用少、功能豐富…

Xsens-AAA工作室品質,為動畫師準備

每一幀都講述著一個故事&#xff0c;當動作真實呈現時&#xff0c;故事便鮮活起來。我們打造并改進了 Xsens Animate&#xff0c;助力專業人士突破數字動畫的界限。 通過升級后的 Xsens Animate&#xff0c;您可以獲得女性和男性解剖模型以及更精確的運動引擎&#xff0c;從一…

嵌入(Embedding)技術的實現原理與應用場景解析

嵌入&#xff08;Embedding&#xff09;技術的實現原理與應用場景解析 引言&#xff1a;從One-Hot到語義空間 在自然語言處理的演進歷程中&#xff0c;嵌入技術&#xff08;Embedding&#xff09;的誕生標志著一個重要轉折點——它讓離散的符號表示突破了維度詛咒&#xff0c…

金倉數據庫征文-金倉KES數據同步優化實踐:邏輯解碼與增量同步

目錄 一.同步場景與方案選型 二.什么是KES 三.同步環境配置 1.前置條件驗證 2.邏輯解碼配置 四.同步實施與問題排查 1.結構映射規則 2.增量數據捕獲 3.數據一致性校驗 五.性能調優實踐 1.同步線程優化 2.批量提交優化 3.資源監控指標 六.典型場景解決方案 1.雙向…

開源語義分割工具箱mmsegmentation基于Lovedata數據集訓練模型

開源語義分割工具箱mmsegmentation安裝環境 文章目錄 1、下載數據集2、整理數據集3、下載預訓練模型4、測試5、訓練模型參考官方數據處理步驟 https://github.com/open-mmlab/mmsegmentation/blob/main/docs/zh_cn/user_guides/2_dataset_prepare.md#loveda 數據集類別標簽:…

Python概率統計可視化——概率分布、假設檢驗與分子運動模型

Python概率統計可視化——概率分布、假設檢驗與分子運動模型 前言 概率統計作為描述不確定性和隨機現象的數學工具&#xff0c;廣泛應用于物理學、生物學、經濟學等領域。然而&#xff0c;抽象的概率分布和統計推斷過程往往難以直觀理解。可視化技術通過將概率密度、假設檢驗邏…

NLP學習路線圖(二十二): 循環神經網絡(RNN)

在自然語言處理&#xff08;NLP&#xff09;的廣闊天地中&#xff0c;序列數據是絕對的核心——無論是流淌的文本、連續的語音還是跳躍的時間序列&#xff0c;都蘊含著前后緊密關聯的信息。傳統神經網絡如同面對一幅打散的拼圖&#xff0c;無法理解詞語間的順序關系&#xff0c…

禪道5月更新速覽 | 新增交付物配置功能,支持建立跨執行任務依賴關系,研發效能平臺上線

禪道體驗又升級啦&#xff01;禪道5月新功能合集來啦&#xff0c;研發效能平臺與大家見面啦&#xff01; 我們將繼續堅持&#xff0c;月月有大招&#xff0c;迭代不停歇&#xff0c;快來更新禪道&#xff0c;體驗全新的項目管理工具吧~ ?

【PDF PicKiller】PDF批量刪除固定位置圖片工具,默認解密,可去一般圖、背景圖、水印圖!

PDF批量刪除固定位置圖片工具 PDF PicKiller <center>PDF PicKiller [Download](https://github.com/Peaceful-World-X/PDF-PicKiller)&#x1f929; 工具介紹&#x1f973; 主要功能&#x1f92a; 軟件使用&#x1f92a; 參數解釋&#x1f92a; 關鍵代碼&#x1f929; 項…

kubeadm安裝k8s

1、環境準備 1.1、升級系統內核 參考另一篇文章&#xff1a;https://blog.csdn.net/u012533920/article/details/148457715?spm1011.2415.3001.5331 1.2、設置Hostname cat <<EOF > /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhos…

Vue基礎(14)_列表過濾、列表排序

Array.prototype.filter()【ES5】 filter() 方法創建給定數組一部分的淺拷貝&#xff0c;其包含通過所提供函數實現的測試的所有元素。 語法&#xff1a; filter(callbackFn) filter(callbackFn, thisArg) 參數&#xff1a; callbackFn(回調函數)&#xff1a;為數組中的每個元…

ComfyUI 中如何使用 Depth ControlNet SD1.5

目錄 SD1.5 Depth ControlNet 簡介 Depth ControlNet 主要特點 SD1.5 Depth ControlNet工作流準備工作 1. 安裝必要插件 方式一:使用 ComfyUI Manager(推薦) 方式二:通過 git 安裝必要插件 方式三:手動安裝(不推薦) 2.1 下載工作流所需模型 2.2 模型存放位置 SD…

IoT/HCIP實驗-3/LiteOS操作系統內核實驗(任務、內存、信號量、CMSIS..)

文章目錄 概述HelloWorld 工程C/C配置編譯器主配置Makefile腳本燒錄器主配置運行結果程序調用棧 任務管理實驗實驗結果osal 系統適配層osal_task_create 其他實驗實驗源碼內存管理實驗互斥鎖實驗信號量實驗 CMISIS接口實驗還是得JlINKCMSIS 簡介LiteOS->CMSIS任務間消息交互…