linux命令__grep【參數】

来源:https://www.cnblogs.com/ivanlee717/archive/2022/06/03/16340188.html
-Advertisement-
Play Games

grep grep命令的功能似乎過濾制定規則的信息。 冷知識:grep的名字來源於一個sed格式:g/re/p g:所有行,re:正則規則,p:列印 用法: grep(global search regular express and print out line)列印匹配的行(內容) 類似的命令包 ...


grep

grep命令的功能似乎過濾制定規則的信息。

冷知識:grep的名字來源於一個sed格式:g/re/p g:所有行,re:正則規則,p:列印

用法:

grep(global search regular express and print out line)列印匹配的行(內容)
類似的命令包括egrep、fgrep、rgrep

grep [OPTION...] PATTERNS [FILE...]

grep [OPTION...] -e PATTERNS ... [FILE...]

grep [OPTION...] -f PATTERN_FILE ... [FILE...]

grep在指定的文件中搜索包含PATTERN匹配的行。如果不指定文件或指定了“-”,則從標準輸入中進行搜
索。	預設情況下,grep列印匹配的行。
此外,grep還有很多演變命令,如egrep、fgrep和rgpre,分別對應grep -E、grep -F和grep -r。
這些變種已經棄用,但他們被提供用作向後相容。

選項

1. 匹配方式的選擇

grep正則表達式(BRE、ERE、PCRE)

-E, --extended-regexp
	將PATTERN作為擴展的正則表達式(ERE)
	
-F,--fixed-strings
	將PATTERN作為為固定字元串的列表,由換行符分隔,匹配其中任意一個	

-G, --basic-regexp	
	將PATTERN作為基本正則表達式(BRE),該選項為預設設置

-P,--perl-regexp
	將PATTERN作為perl相容正則表達式(PCRE)。

2. 匹配控制

-e PATTERN, --regexp=PATTERN
	將PATTERN作為匹配項,如果該選項被多次使用或和-f(--file)選項一起使用,匹配所有
	的匹配項。該選項可以用來保護以'-'開頭的匹配項。
	
-f FILE,--file=FILE
 	將FILE中的每行都作為匹配項,如果此選項被多次使用或與-e(--regexp)選項組合使用,搜索所有給定的匹配項。空文件包含零個匹配項,因此不匹配任何內容
 
-i,--ignore-case
	忽略匹配項的大小寫

-v,--invert-match
	反向匹配,選擇沒有匹配上的行

-w,--word-regexp
	僅匹配完整單詞,匹配的子字元串必須位於行的開頭,或者前面有一個非字詞字元。類似地,它必須位於行尾或後面跟非字片語成字元(字片語成字元是字母、數字和下劃線)。
	
-x,--line-regexp
	 僅選擇與整行完全匹配的匹配項。對於正則表達式匹配項,這類似於將匹配項括起來,然後用^和$將其包圍。
	   
-y   和-i作用相同,但已過時

3. 通用輸出控制

-c,--count
	不列印匹配結果,而是列印匹配的行數

--color[=WHEN],--colour[=WHEN]
	將匹配到的字元串、行、上下文行、文件名、行號、位元組偏移量和帶轉義符的分隔符(用於欄位和上下文行組)序列著色,顏色有環境變數GREP_COLORS決定,雖然GREP_COLOR已經過時,但grep依然支持該環境變數,只不過優先權比GREP_COLORS低。WHEN可以為never、always和auto。相關環境變數介紹
	:略。
-L,--files-without-match
	不列印正常匹配結果,而是列印沒有匹配上的文件的名稱,掃描將在第一次匹配時停止。
-l,--files-with-matches
	不列印正常匹配結果,而是列印匹配上的輸入文件的名稱,掃描將在第一次匹配時停止

-m NUM --max-count=NUM
	在匹配到NUM行後停止讀取文件

-o,--only-matching
	僅列印匹配行中(非空的)匹配部分,每個部分在單獨的輸出行上

-q,--quiet,--silent
	不向標準輸出列印任何內容,匹配到內容立刻退出,即使檢測到錯誤		

-s,--no-messages
	當文件不存在或文件不可讀取時,不顯示錯誤信息

4. 輸出行首碼控制

-b,--byte-offset
	在每行輸出之前,列印輸入文件中基於0的位元組偏移量。如果指定了-o(--only-matching),則列印
	匹配項本身的偏移量

-H,--with-filename
	列印每個匹配的文件名,當匹配到多個匹配項時,該選項為預設配置

-h,--no-filename
	在輸出中不顯示文件名,只匹配到單個結果時,預設不顯示文件名

--label=LABEL
	將標準輸入顯示為來自文件標簽的輸入(???不理解)

-n,--line-number
	顯示行號

-T,--initial-tab
	使匹配結果中每行的第一個字元位於製表位上,以便製表的對齊看起來顯得正常。該選項對一些給輸出內
	容加首碼的選項很有作用:-H、-n和-b

-u,--unix-byt-offsets
	報告Unix樣式的位元組偏移量,此開關使grep報告位元組偏移量,就像文件是Unix樣式的文本文件一樣,即
	去掉CR字元。這將產生與在Unix機器上運行grep相同的結果。除非同時使用-b選項,否則此選項無效,
	它對MS-DOS和MS Windows以外的平臺沒有影響。

-Z,--null
	將文件名後面的符號(冒號或回車)改為零位元組(ASCII NUL 字元),例如,grep -lZ在每個文件名
	後輸出一個零位元組,而不是通常的換行。此選項使輸出明確,甚至如果文件名包含不尋常的字元,如新行。
	此選項可與其他命令一起使用,如find -print0、perl-0、sort-z和xargs-0來處理任意文件名,
	甚至包含換行符的文件名。

5. 上下文控制

-A NUM,--after-context=NUM
	在匹配行之後列印下文的NUM行,連續的匹配組之間用分隔符“--”隔開。和-o或--only-matching選項
	一起使用時,該選項沒有任何效果,並且會發出警告

-B NUM,--before-context=NUM
	在匹配行的前面列印上文的NUM行,,連續的匹配組之間用分隔符“--”隔開。和-o或--only-matching
	選項一起使用時,該選項沒有任何效果,並且會發出警告

-C NUM,-NUM,--context=NUM
	列印匹配行的上下文各NUM行,連續的匹配組之間用分隔符“--”隔開。和-o或--only-matching選項
	一起使用時,該選項沒有任何效果,並且會發出警告

6. 文件及目錄的選擇

-a,--text
	像處理文本一樣處理二進位文件,相當於--binary-files=text選項

--binary-files=TYPE
	如果文件的前幾個位元組指示該文件包含二進位數據,則假定文件的類型為TYEP。預設情況下,TYPE為
	binary,grep通常只輸出一行表示二進位文件匹配的消息,或者因為沒有匹配結果而沒有輸出;如果
	TYPE為without-match,則grep不對二進位文件進行匹配,相當於-I選項;如果TYPE為text,grep
	將二進位文件當作文本文件處理,這相當於-a選項,處理二進位數據時,grep可以將非文本位元組視為行
	終止符,例如,模式“.”(句點)可能不能匹配空位元組,因為空位元組可能被視為行終止符。警告:grep
	 --binary-files=text可能輸出二進位垃圾,如果輸出是終端且終端驅動程式將其中一些文本解釋為
	 命令則可能會產生嚴重的副作用。

-D ACTION,--devices=ACTION
	如果輸入文件是一個設備、FIFO或則套接字,使用ACTION去處理它,ACTION預設為read,意味著該文
	件將被當作普通文件進行讀取。如果ACTION為skip,設備文件被忽略。

-d ACTION,--directories=ACTION
	如果輸入文件為一個目錄,使用ACTION處理它。ACTION預設為read,即將目錄作為普通文件處理。如果
	ACTION為skip,跳過該目錄。如果ACTION為recurse,遞歸讀取目錄下的所有文件,並且遵循命令行
	符號鏈接,相當於-r選項

--exclude=GLOB
	跳過名稱與GLOB匹配的文件(使用通配符匹配),文件名glob可以使用*、?、和[…]作為通配符,並逐
	字引用通配符或反斜杠字元。

--exclude-from=FILE
	跳過其基名稱與從FILE讀取的任意文件名通過glob匹配的文件(使用通配符匹配,如--exclude下所述)

--exclude-dir=DIR
	從遞歸搜索中排除與DIR匹配的目錄

-I
	處理二進位文件,就像它不包含匹配的數據一樣,這相當於--binary-files=without-match選項。

--include=GLOB
	搜索名稱與從GLOB匹配的文件(使用通配符匹配,如--exclude下所述)

-r,--recursive
	遞歸讀取目錄下的所有文件,並且遵循命令行符號鏈接。如果沒有給定文件操作數,grep將搜索當前工作
	目錄。該命令相當於-d recurse選項

-R,--dereference-recursive
	遞歸讀取目錄下所有文件,遵循所有符號鏈接

7. 其他選項

--line-buffered
	在輸出上使用行緩衝,這可能會導致性能下降

-U,--binary
	將文件視為二進位文件,預設情況下,在MS-DOS和MS-Window中,grep通過讀取文件前32KB的內容決
	定這個文件的類型,如果文件為文本文件,grep從原始文件中刪除CR字元(使帶有‘^'和’$'的正則表達
	式能正常工作),指定-U可以讓其對文件進行逐字讀取。如果文件為文本文件,每行末尾有CR/LF,這將
	造成一些正則表達式失效。該選項對MS-DOS和MS-Windows以外的平臺無影響。

-z,--null-data
	將輸入視為一組行,每個行以零位元組(ASCII NUL字元)而不是換行符終止,與-Z或--null選項類似,
	此選項可以與sort -z等命令一起使用,以處理任意文件名。

示例

1. 在文件中搜索字元串

grep -i 字元串 文件名

image-20220603143954181

加上-n參數可以顯示匹配出來的行號

image-20220603144035047

顯示不匹配的行-v

image-20220603144134389

-v參數顯示的就是不包含字元串的所有內容

2. 使用grep過濾命令輸出

image-20220603144335200

3. 使用正則

由於在grep中,基本正則表達式和擴展正則表達式在使用時的區別在於:在基本正則表達式中,元字元?、+、{、|、(、和)失去了特殊意義,需要使用反斜杠版本\?、+、{、|、(、和\)。如果不加任何匹配方式的選項,預設為-G,即基本正則表達式。

image-20220603145650990

匹配某個字元在行首的情況

image-20220603145826121

匹配某個字元在行尾的情況

image-20220603145920944

匹配某個字元前有任意字元的情況

image-20220603150205306

匹配某個字元前面是特定字元的情況

image-20220603150631314

匹配某個字元前面不是特定字元的情況

image-20220603150712222

4. 擴展正則

匹配 bz 或 gz 或 z 開頭,後邊跟 ip 的行,這裡用到了擴展正則中的 小括弧 和 或符號"|":

這裡就需要用到-E參數,實質上是過濾多個參數的表達式匹配,用小括弧擴起來表示一個整體

image-20220603151027936

grep -E的用法等同於egrep

image-20220603151223235

列印ip信息

image-20220603151636217

image-20220603151848114

上述兩個命令裡面,必須要加上轉義符號才能表達符號原本的意思,

5. grep -F

grep -F PATTERN… [FILE…] 將PATTERN作為固定字元串形式的匹配項,不識別正則表達式。等同於fgrep命令

在實踐中,我有一個需求,搜索日誌關鍵字,而這一串關鍵字中包含了特殊字元,這些字元在正則式中有獨特的語法,而你又不想用複雜的正則表達式去匹配的時候。那麼grep -F 就派上了用場:

image-20220603153238515

現在有這麼一堆文件,裡面包含了各式各樣的文件名,如果我們想要找文件名為‘^abc’的文件

image-20220603153528576

尋找efg$的文件:

image-20220603153614459

與此類推:

image-20220603153741506

6. grep -e

grep -e PATTERN… [FILE…] 和grep -f FILE… [FILE…]-e的作用和不加參數時類似,唯一區別是可以保護以‘-’開頭的匹配項

[root@honey-master data] cat test 
-test
test

image-20220603153937124

-f的作用是將FILE中的每行都作為匹配項,和-e一樣可以多次使用

把模板(pattern)寫在一個文件里,然後使用-f參數來讀取這些pattern,如果文件中包含0個pattern,那麼什麼都不匹配;如果有多個pattern,那麼必須一行寫一個pattern,即:列印後面文件中與前面文件中相同的行,並且,-f參數後面作為標準的文件一定不能有空格

image-20220603155836725

我們可以看到使用test1文件去匹配test文件,所以輸出會有全部的test文件內容

image-20220603160004951這裡解釋了為什麼-f參數後面的文件不能有空格。

7. grep -i

忽略大小寫

[root@honey-master test] cat test 
test1_ivanlee
test1_ivanlee1
tesT1_IVANlee2

image-20220603160417292

8. grep -w

匹配完整的單詞,單詞前後不能有其他字母或數字,但允許單詞前面有非字詞符號(包括空格)。

image-20220603161007442

9. grep -x

整行匹配

image-20220603161111107

10. grep -c

列印匹配的行數

image-20220603161235938

11. grep -color[=WHEN] PATTERN… [FILE…]

可以看到centos系統預設使用紅色顯示匹配項,只不過他只有三個選項,分別是never,auto,always

always和auto的區別就是,always會在任何情況下都給匹配欄位加上顏色標記,當通過管道或重定向時就會多出一些控制字元,結果會變成
export [[1;32m[[KGREP[[m[[K_OPTIONS='--color=always'
export [[1;32m[[KGREP[[m[[K_COLOR='1;32'
而auto則只在輸出到終端時才加上顏色。

image-20220603161735655

如果想改變匹配顏色,可以修改./bashrc文件

export GREP_COLOR='a;b' #預設是1;31,即高亮的紅色

來設置,其中:

a可以選擇:【0,1,4,5,7,8】

0 關閉所有屬性

1 設置高亮度

4 下劃線

image-20220603162111764

5 閃爍

7 反顯

8 消隱

其他的效果太難看了~~~~

自己也可以去琢磨顏色,把b值設置為20就是綠色

image-20220603162248726

12 grep -L和l

L不列印匹配的內容,列印FILE中沒有匹配上的文件(不能是文件內容了,只能是文件名)。l列印匹配成功的文件名

13. grep -m

grep -m NUM PATTERN… [FILE…] 每個文件最多匹配出NUM行,

image-20220603162812690

14. grep -o

僅列印匹配的內容,而不是匹配的一整行

image-20220603162858223

15. grep -q

不顯示匹配結果,匹配結束立刻退出

16. grep -s

不顯示文件不存在和讀取失敗的錯誤信息

image-20220603162958627

17. grep -b

列印匹配項基於文件開頭的偏移量

image-20220603163045872

18 grep -n

顯示匹配項在文件中的行號

image-20220603163446657

19 grep -h

不顯示文件名,單個文件匹配時,預設不顯示文件名

image-20220603163816518

20. grep -T

顯示時使用製表符

image-20220603164006577

21. grep -Z

文件名後面的符號改為零位元組(ASCII NUL字元)

image-20220603164133832

22. grep -A

image-20220603164346237

23. grep -a PATTERN… [FILE…]

將二進位文件當做文本文件來處理。

28. grep --binary-files=TYPE PATTERN… [FILE…]

TYPE的值可以為:binary(預設)、without-match、text,binary和without-match的區別是前者使用時會提示二進位文件無法匹配,後者不會提示,–binary-files=text相當於-a選項。

29. grep -r

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

-Advertisement-
Play Games
更多相關文章
  • Spring Security團隊正式宣佈Spring Security OAuth終止維護。 目前官網的主頁已經高亮提醒徹底停止維護。 舊的Spring Security OAuth項目終止到2.5.2.RELEASE版本,該項目將不會再進行任何的迭代,包括Bug修複,之前胖哥已經提醒該項目即將停 ...
  • AES(Advanced Encryption Standard) 是一種對稱加密演算法,是比 DES 更好的對稱加密演算法類。 使用AES,在前後端之間傳送密碼等相關數據時,能簡單高效的提高安全性。 前端的 AES(javascript/typescript) 前端的加密庫一般用 crypto-js。 ...
  • 背景 開發應用程式久了,總想刨根問底,尤其對一些有公共答案的問題。大家都能解釋,但是追根究底,都解釋不清。凡是都有為什麼,而且用數字說明問題是最直觀的。 本文主要想探究一下連接資料庫的細節,尤其是在 Web 應用中要使用資料庫來連接池,以免每次發送一次請求就重新建立一次連接。 對於這個問題,答案都是 ...
  • 1、static關鍵字簡介 static為java中的關鍵字,可以修飾類中的方法、變數,以及修飾靜態代碼塊 當用static修飾的方法和變數時可以直接通過類名.方法名和類名.變數名來訪問,不需要進行對象的實例化操作,方便在沒有創建對象的時候來調用方法或者變數 2、static修飾方法 static修 ...
  • 工作中遇到一個古老的程式,資料庫使用的事access,想用python批量導入數據,報“INSERT INTO 語句的語法錯誤”。但是,將插入語句放到access,正常通過,百思不得其解,無奈問度娘,有朋友說有關鍵字,如user,把他加上中括弧設置斷點,把sql【insert into [users ...
  • 條碼的應用已深入生活和工作的方方面面。在處理條碼時,常需要和各種文檔格式相結合。當需要在文檔中插入、編輯或者刪除條碼時,可藉助於一些專業的類庫工具來實現。本文,以操作PDF文件為例,介紹如何在編輯表格時,向單元格中插入條形碼。 【類庫引入及代碼思路】 本次功能測試中,使用 Free Spire.PD ...
  • 最近通過WPF開發項目,為了對WPF知識點進行總結,所以利用業餘時間,開發一個學生信息管理系統【Student Information Management System】。前三篇文章進行了框架搭建和模塊劃分,後臺WebApi介面編寫,以及課程管理模塊開發,本文在前三篇基礎之上,繼續深入開發學生信息... ...
  • 產品簡介 SwebONE是一款OA類的開源解決方案,通過SwebUI平臺開發,包含了註冊、登陸、用戶信息等基本功能。 免費獲取方案 開源代碼: https://github.com/comsmobiler/SwebONE(順便“★Star”一下) 部署文檔 項目服務端部署、資料庫還原請參考教程: h ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...