Linux文本處理三劍客之grep 和 正則表達式

本文主要介紹:1、文本處理工具grep 2、正則表達式

Linux文本處理三劍客:

1、grep : 文本過濾(模式:pattern)工具

2、sed? : (stream editor),文本編輯工具

3、awk : Linux上的實現gawk,文本報告生成器

 

1、文本處理工具grep

作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行。

模式:由正則表達式字符及文本字符所編寫的過濾條件。

grep 支持標準正則表達式;?egrep ?支持擴展正則表達式,相當于grep -E ;?fgrep ?不支持正則表達式)

  • ????語法:grep? [OPTIONS]? PATTERN? [FILE…]

????選項:

–color=auto: 對匹配到的文本著色顯示

-v: 顯示不能夠被pattern匹配到的行

-i: 忽略字符大小寫? 常用

-n: 顯示匹配的行號,匹配到的是第幾行??常用

-c: 統計匹配的行數,匹配到了多少行?常用

-o: 僅顯示匹配到的字符串??常用

-q: 靜默模式,不輸出任何信息

-A #: after, 后#行,包含匹配到的行,還顯示匹配到的行的后幾行

-B #: before, 前#行,包含匹配到的行,還顯示匹配到的行的前幾行

-C #: context, 前后各#行,包含匹配到的行外,還顯示匹配到的行的前后各幾行

-e:實現多個選項間的邏輯or關系 ,多個-e 之間是或關系(grep –e? ‘cat’? -e? ‘dog’? file)?常用

-w:整行匹配整個單詞,只能匹配整個單詞(字母、數字、下劃線都算單詞一部分)

-E:使用ERE,相當于egrep??常用

-F:相當于fgrep,不支持正則

2、正則表達式

REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能。(man? 7? regex)

分為兩類:基本正則表達式:BRE

擴展正則表達式:ERE

基本正則表達式元字符:字符匹配、匹配次數、位置錨定、分組

  • 字符匹配:

????????????.? ? ?匹配任意單個字符;

[]? ? 匹配指定范圍內的任意單個字符

[^]? ? 匹配指定范圍外的任意單個字符

[:digit:]? ?十進制數字 ([0-9]也可,匹配10-19之間的數字不能寫成[10-29],要每一位分別寫[1-2][0-9])

[:lower:]? ?小寫字母

[:upper:]? ?大寫字母

[:alpha:]? ? 任何英文大小寫字符

[:alnum:]? ?字母和數字

[:space:]? ? ? 空白字符(水平和垂直的空白字符,比[:blank:]? 包含范圍廣)

[:punct:]? ? ?標點符號

[:blank:]? ?空白字符(空格和制表符)

[:cntrl:]? ?不可打印的控制字符(退格、刪除、警鈴…)

[:graph:]? ?可打印的非空白字符

[:print:]? ?可打印字符

 

  • 匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數

????????????*? ? 匹配前面的字符任意次,包括0次 (貪婪模式:盡可能長的匹配)

.*? ? 任意長度的任意字符

\?? ? 匹配其前面的字符0或1次

\+? ? 匹配其前面的字符至少1次

\{m\}? ? 匹配前面的字符m次

\{m,n\}? ? 匹配前面的字符至少m次,至多n次

\{,n\}? ? 匹配前面的字符至多n次

\{m,\}? ? 匹配前面的字符至少m次

 

  • 位置錨定:定位出現的位置

????????????^? ? 行首錨定,用于模式的最左側(^PATTERN)

$? ? 行尾錨定,用于模式的最右側(PATTERN$)

^PATTERN$? ? 用于模式匹配整行(? ^$? ? 空行? ?? ? ?^[[:space:]]*$?? ? 水平或垂直空白行? ? ?)

 

\< 或 \b? ? 詞首錨定,用于單詞模式的左側

\> 或 \b? ? 詞尾錨定;用于單詞模式的右側

\<PATTERN\>? ? 匹配整個單詞

 

  • 分組: \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,如\(root\)\+表示root至少出現一次。

? ? ? ? ? ? ? ?后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)

利用: \1, \2, \3, …來引用前面從左到右第一個括號、第二個括號…匹配到的內容

如: \(bican\+\(bc\)*\)

\1? 匹配? ? ? bican\+\(bc\)*

\2? 匹配? ? ? bc

  • ? ? ? ?或者:\|

? ? 示例:? a\|b? 表示a或b? ? ? ? ?C\|cat? 表示C或cat? ? ? ? \(C\|c\)at? ?表示Cat或cat

擴展正則表達式元字符

  • 字符匹配(同基本正則表達式)
  • 匹配次數

? ? ? ? ? ? ?*? ? 匹配前面的字符任意次,包括0次 (貪婪模式:盡可能長的匹配)

?? ? 匹配其前面的字符0或1次

+? ? 匹配其前面的字符至少1次

{m}? ? 匹配前面的字符m次

{m,n}? ? 匹配前面的字符至少m次,至多n次

{,n}? ? 匹配前面的字符至多n次

{m,}? ? 匹配前面的字符至少m次

  • 位置錨定(同基本正則表達式)
  • 分組 :? ?()? ? ?后向引用:? \1? ? \2
  • 或者:? |? ? ? ? ? ? ?示例:? ?(C|c)at? ?表示Cat或cat

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96487

(1)
bican813bican813
上一篇 2018-04-16 21:57
下一篇 2018-04-17 17:44

相關推薦

  • linux基礎3

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who | cut -d ‘ ‘ -f1 | sort -u root 2、取出最后登錄到當前系統的用戶的相關信息。 [root@localhost ~]# last -1 | id uid=0(root…

    Linux筆記 2018-07-08
  • 小白加薪升職記之正則表達式基礎

    正則表達式基礎命令

    Linux筆記 2018-06-01
  • redis

    分布式存儲一定是每個節點只存儲一部分數據。

    2018-07-20
  • Linux用戶與組管理

    linux用戶及組管理

    Linux筆記 2018-05-24
  • 第一周作業-Linux Basic

    ? Linux 入門基礎 計算機組成及功能 一般而言,計算機的組成應該分為兩部分: 一部分指的是硬件部分。根據馮諾伊曼提出的計算機體系架構,一臺計算機主要分為五個部分:控制器、運算器、存儲器、輸入設備、輸出設備 運算器: 包含算數邏輯單元(ALU)、累加器、狀態寄存器、通用寄存器組等,主要作用如下 算數邏輯單元(ALU):進行二位元的算術運算,如加減乘(不包…

    Linux筆記 2018-06-24
  • 文件管理類命令

    Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 <1>命令:CP 概念:用來將一個或多個源文件或者目錄復制到指定的目的文件或目錄。它可以將單個源文件復制成一個指定文件名的具體的文件或一個已經存在的目錄下。cp命令還支持同時復制多個文件,當一次復制多個文件時,目標文件參數必須是一個已經存在的目錄,否則將出現錯誤。 語法:c…

    2018-05-28
欧美性久久久久