正則表達式

Linux文本處理三劍客

*************************************************
grep:文本過濾(pattern模式)工具 grep egrep fgrep
sed:stream editor,文本編輯工具
awk:Linux上的實現gawk,文本報告生成器

*************************************************

grep 格式 grep [options] PATTERN [file…]
grep root /etc/passwd
grep “$USER” /etc/passwd
grep ‘$USER’ /etc/passwd
grep `whoami` /etc/passwd
-v 顯示不被PATTERN匹配到的行 ? ? ? ?grep -v ‘a’ f2 將文件f2中不包含字符a的行輸出
-i 忽略字符的大小寫
-n 顯示匹配的行號 將匹配到的行號和行輸出
-c 統計匹配的行數 ? ? 行數表示有幾行包含所匹配的字符
-o 僅顯示匹配到的字符串
-q 靜默模式,不輸出任何信息
-A#:after 后#行 將匹配到字符所在行及后#行輸出
-B#:before 前#行 將匹配到字符所在行及前#行輸出
-C#:將匹配到字符所在行及前后各#行輸出
-e:實現多個選項間的邏輯or關系 ? ? grep -e “root” -e “user” f1 ? ? ? 取f1文件中的root或者user 或關系
可以加多個每個前必須加-e
-w:匹配整個單詞
grep “root” f1只要包含root的字符都輸出rooter也可以輸出
grep -w “root” f1只包含root,rooter就不能輸出
除數字字母下劃線以外都可以作為分隔符
-f:相當于fgrep,不支持正則表達式
例:cat >p.txt 創建文件p.txt
grep -f p.txt /etc/passwd 在/etc/passwd中匹配p.txt的內容(輸出與p文件內容相同的行)

**************************************************************************************
正則表達式
REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義而表示控制或通配的功能
分類:基本正則表達式 BRE 擴展正則表達式 ERE
元字符分類:字符匹配 匹配次數 位置錨定 分組

*************************************************************************************

字符匹配:
. 匹配任意單個字符 一個.代表一個字符,兩個.就代表兩個字符 …… 放在中括號內不表示單個字符
例 :echo abc |grep “a.c” 具有貪婪模式, 從左到右三個三個輸出,最后不夠三個顏色不變
轉義:grep -w “.\..” f2 本來三個點表示匹配任意三個字符,但轉義之后中間表示一個點不代表字符結果為a.b
[] 匹配指定范圍內的任意單個字符
[^] 匹配指定范圍外的任意單個字符
[:alnum:] 字母和數字
[:alpha:] 代表任何英文大小寫字符
[:lower:] 小寫字母
[:upper:] 大寫字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴)
[:digit:] 十進制數字
[:xdigit:]十六制數字
[:graph:] 可打印空白字符
[:print:] 可打印字符
[:punct:] 標點符號

***************************************************************************************

匹配次數:用在指定次數的字符后面,用于指定前面的字符要出現的次數
* 匹配前面的字符任意次,包括0次,具有貪婪模式:盡可能長的匹配 X* 表示x出現的任意次
例grep “ax*b” f2 表示一個單詞或者一個字符串以a開始b結尾中間的x不管出現幾次其中b必須有*前的字符可有可無
.* 任意長度的任意字符 ? 包括空行
\? 匹配其前面的字符0次或1次 ? ? 例 grep “ab\?” f2 表示b的次數是一次或者0次
\+ 匹配其前面的字符至少一次 ? ? 例grep “ab\+” f2 表示b的次數至少一次
\{\n} 匹配前面的字符n次 ? ? ? ? ? ? 例 grep “ab\{3\}” f2 表示b的次數出現3次
\{m,n\}匹配前面的字符至少M次最多n次
\{,n\}匹配前面的字符最多出現n次
\{n,\}匹配前面的字符最少出現n次

************************************************************************************

位置錨定:定位出現的位置
^ 行首錨定,用于模式的最左側 表示最左側即開頭是以什么字符或單詞(與-w配合)出現
在中括號內說明是取反 在中括號外說明是行首錨定
$ 行尾錨定,用于模式的最右側 ? ? ? ? ? ? ? ?grep “ab$” f2 ? ? ? ?表示最右側是ab結尾的字符
^PATTERRN$ 用于模式匹配整行 ^$空行 ^[:space:]$空白行
\<或\b 詞首錨定,用于單詞模式的左側 ? ? ? ? ? ?grep “\<abb” f2 表示字符的最左側是以abb開頭的字符或單詞(-w)
\>或\b 詞尾錨定,用于單詞模式的右側
\< \>匹配整個單詞

************************************************************************************

分組\(\)將一個或多個字符捆綁在一起,當作一個整體進行處理
分組括號中的模式匹配到的內容會被正則表達式引擎記錄與內部的變量中,這些變量的命名方式為:\1,\2,……
例 \(string1\+\(string2\)*\) \1: string1\+\(string2\)*\ \2: string2
后向引用:引用前面的分組括號中的模式所匹配字符,而非模式本身
或者: \| a\|b a或b
例 grep “\(ab\)\{2\}” f2 把ab作為一個整體連續出現兩次的輸出顯示
grep “hello\{2\}” f2 “\{2\}”表示前面的字符連續出現2次,所影響的字符只是前面的單個字符即o顯示為helloo hellooo……
grep “\(ab\(bc\(cd\)\)\)” f2 把ab bc cd分別做分組,ab為一組bc為一組cd為一組

 

 

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

(1)
路在腳下路在腳下
上一篇 2018-04-07
下一篇 2018-04-07

相關推薦

  • sed 的基礎應用與掌握

    趕緊試試吧看是看不會的

    Linux筆記 2018-04-19
  • linux如何使用命令幫助

    Linux如何使用命令幫助 whatis:顯示命令的簡短描述 whatis命令在用 catman -w命令創建的數據庫中查找command參數指定的命令、 系統調用、庫函數或特殊文件名。whatis命令顯示手冊部分的頁眉行。然后可以發出man命令以獲取附加的信息。whatis命令等同于使用man -f命令。linux系統剛安裝后不可立即使用使用 makewh…

    Linux筆記 2018-05-07
  • centos6.9啟動之grub

    本文主要介紹系統啟動中grub部分

    2018-05-13
  • 隨堂筆記2

    記馬哥Linux運維課程第二周知識點(持續更新中)   bin目錄 存放二進制數據 給普通用戶執行的 在Centos7上 綠色的為… 并不是真正的文件夾 而是快捷方式 bin->usr/bin 內容放在一起 ;在6上,這兩者并不是同一個目錄,分開放 sbin 給管理員執行的二進制程序 media mnt(mount) 充當外圍設備…

    Linux筆記 2018-07-29
  • SAMBA服務介紹及相關實驗

    Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它為局域網內的不同計算機之間提供文件及打印機等資源的共享服務。

    2018-06-29
  • 小白加薪升職記第二篇–Linux長征開始

    記錄文件管理命令及Linux命令行擴展功能

    Linux筆記 2018-05-19

評論列表(2條)

  • linux_test
    linux_test 2018-04-07 19:26

    666

    • 路在腳下
      路在腳下 2018-04-07 19:56

      @linux_test有沒有錯的地方

欧美性久久久久