天天看點

lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options

正規表達式

前言

為什麼要介紹正規表達式,是因為下面的介紹到grep指令會用到正規表達式,是以,放在最前面來進行說明

1.什麼是正規表達式 ?

一個正規表達式就是描述了一個字元串集合的方式。正規表達式的表示就是一些特殊符号的組合,而每個符号代表着一些具體的意思。符合的組合就定義了一套規則和方法,其主要作用就是從大量文本從比對出符合條件行。

2.正規表達式的使用場景

在Linux中,正規表達式的主要使用場景就是文本處理三劍客。grep,sed,awk .除此之外,vi指令也支援正規表達式。

3.正規表達式字元表示

在正規表達式中,又可以分為基本正規表達式和擴充正規表達式 。其主要差別在于:

  • 基本正規表達式隻認識元字元,其元字元主要包括:^ $ . [] * ,具體含義見下表格
  • 擴充正規表達式又添加了() {} ? + | 等符号

以下為各個元字元的含義

lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options

元字元及含義

擴充正則中支援的字元

lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options

擴充正則支援的字元

預定義字元類

lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options

4.它們之間的差別

在上面我們提到正則包括基礎正則和擴充正則,但是它們有什麼差別呢?在什麼地方使用呢 ? 接下來我們主要說明在Linux 三劍客中的不同(grep,sed,awk)

  • grep : 在grep中,如果隻是使用grep指令 ,可使用原字元的正則或者預定義字元類,而若想使用擴充正則中包含的字元,就必須在grep後加參數-E 。

grep指令

作用:

  • 用于列印比對給定模式的行

文法:

grep [options] PATTERN [FILE...]

grep [options] [-e PATTERN | -f FILE] [FILE...]

說明:

grep指令用于搜尋所給定的模式(PATTERN )的FILE 檔案裡的内容 ,如果從檔案内容裡找到了該模式的檔案内容,grep會把比對的該行顯示出來。若不指定任何檔案,或給的檔案名為- , 則grep會從标準輸入讀取内容。

另外,也可以使用兩個變種程式 egrep 和 fgrep 。 Egrep 與 grep -E 相同。 Fgrep 與 grep -F 相同。
           

選項:options

說明: 以下的NUM代表的是一個數字,代表的是行數-A NUM 或者 --after-context=NUM除了顯示符合條件的那一行之外,并顯示該行之後NUM行的内容-a 或者--text将一個二進制檔案視為一個文本檔案來處理;它與--binary-files=text 選項等價。-B NUM 或者--before-context=NUM除了顯示符合條件的那一行之外,并顯示該行之前NUM行的内容。-C NUM 或者--context=NUM除了顯示符合條件的那一行之外,并顯示該行之前和之後的NUM行的内容-b 或者--byte-offset在輸出的每行前面同時列印出目前行在輸入檔案中的位元組偏移量。--colour[=WHEN] 或者 --color[=WHEN]在比對的行中,已比對到字元串進行着色顯示。WHEN可以是never,always,或是auto。-c 或者--count計算符合條件的行數-d ACTION 或者 --directories=ACTION如果輸入檔案是一個目錄,使用動作ACTION來處理它。預設情況下,動作ACTION是read,意味着目錄将視為普通檔案那樣來讀。如果動作 ACTION是skip ,将不處理而直接跳過目錄。如果動作ACTION是recurse,grep 将遞歸地讀每一目錄下的所有檔案。這樣做和-r選項等價。-E 或者 --extended-regexp将E後面的模式作為一個正規表達式來使用。-e PATTERN 或者 --regexp=PATTERN使用PATTERN作為查找檔案内容的模式(支援正則),但是在單條指令中可使用多個-e選項-F 或者 --fixed-strings将模式 PATTERN 視為一個固定的字元串的清單,用新行 (newlines) 分隔,隻要比對其中之一即可。-f FILE 或者--file=FILE從檔案 FILE 中擷取模式,每行一個。空檔案含有0個模式,是以不比對任何東西。-G 或者--basic-regexp将模式 PATTERN 作為一個基本的正規表達式這是預設值。-H 或者 --with-filename為每個比對列印檔案名。-h 或者 --no-filename當搜尋多個檔案時,禁止在輸出的前面加上檔案名字首。-i 或者 --ignore-case忽略大小寫的差別-L 或者 --files-without-match列印在檔案内容中無法找到比對後的檔案名稱-l 或者 --files-with-matches列印出在檔案内容中找到比對後的檔案名-m NUM 或者 --max-count=NUM在找到NUM個比對的行之後,不再讀這個檔案。-n 或者 --line-number在輸出的每行前面加上它所在的檔案中它的行号。-o 或者 --only-matching隻顯示比對的行中與 PATTERN 相比對的部分。--label=LABEL将來自标準輸入的比對輸出視為來自輸入檔案LABEL的值--line-buffering使用行緩沖,it can be a performance penality.-q, --quiet, --silent不顯示任何資訊。-R, -r, --recursive遞歸地讀每一目錄下的所有檔案。這樣做和 -d recurse選項等價。--include=PATTERN僅僅在搜尋比對 PATTERN 的檔案時在目錄中遞歸搜尋。--exclude=PATTERN在目錄中遞歸搜尋,但是跳過比對 PATTERN 的檔案。-s 或者 --no-messages禁止輸出關于檔案不存在或不可讀的錯誤資訊。-u 或者 --unix-byte-offsets報告Unix風格的位元組偏移量。這個開關使得grep報告位元組偏移量時,将檔案作為Unix風格的文本檔案看待,也就是說将CR字元去掉。這将産生與在一台Unix主機上運作grep完全相同的結果。除非同時使用-b選項,否則這個選項無效。這個選項在MS-DOS和MS-Windows之外的系統中無效。-V 或者 --version向标準錯誤輸出列印 grep 的版本号。-v 或者 invert-match顯示不包含比對模式的所有行。-w 或者 --word-regexp隻選擇含有能組成完整的詞的比對的行。判斷方法是比對的子字元串必須是一行的開始,或者是在一個不可能-x 或者 --line-regexp完全比對。-Z, --null檔案内容全部顯示,不同字型通過顔色加以标注
           

重點

雖然在上面我們可以看到,grep中有很多選項,但是在工作中,大多數的選項是用不到的,這裡我們劃一下重點。

常用參數

lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options

常用參數

執行個體

使用到檔案info,通過grep來進行過濾,info的檔案内容如下:

lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options
  1. 1.查找檔案info中包含ccc的内容并列印行數
grep -n "ccc" info
           
lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options
  1. 2.查找檔案info中包含ggg且忽略大小寫的字元并列印,
grep -i "ggg" info
           
lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options
  1. 3.過濾掉含有ccc的行
grep -v "ccc" info
           
lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options
  1. 4.查找包含ddd,eee,fff的行(注意:以下比對用到正則)
grep -E "ddd|eee|fff" info
           
  1. 5.查找以c開頭的行
grep ^c info
           
lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options
  1. 6.查找以ccx開頭且結尾的行
grep ^ccx$ info
           
  1. 7.查找d字元前可以是任意字元的行
grep .d info
           
  1. 8.查找包含一個或多個d字元的行
grep -E d{1} info
           
lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options
  1. 9.顯示包含a,b,c的字元的行 ; 顯示不包含a,b,c字元的行
包含:grep -i ^[abc] info不包含: grep -i [^abc] info (是全部字元不包含a或b或c)
           
lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options
  1. 10.顯示包含一個或多個含有a字元的行
grep -E a+ info
           
lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options
  1. 11.查找以cc開頭且包含c,x,ld字元的行
grep -E "cc(c|x|ld)" info
           
lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options
  1. 12.查找檔案中所有的大寫字元
grep [[:upper:]] info
           
lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options
  1. 13.比對任意一個字母和數字字元
grep [[:alnum:]] info
           
lsof |grep delete卡住_35個參數13個案例,全面解析Linux三劍客之grep指令正規表達式grep指令說明:選項:options

文本未完待續,後續持續更新sed,awk指令,希望大家關注轉發。