grep與正則表達式

grep與正則表達式
一、grep

grep文本過濾工具
作用:文本搜索工具,可以指定內容對指定文本進行匹配搜索;打印匹配的行
由正則表達式字符及文本字符編寫的過濾條件,來進行逐行匹配
-- color=auto 對匹配到的文本着色顯示
-v 顯示不被pattern (正則表達式)匹配到的行
-i 忽略字符大小寫
-n 顯示匹配的行號
-c 統計匹配的行數
-o 僅顯示匹配到的字符串
-q 靜默模式,不輸出任何信息
-A NUM 同時輸出後NUM行
-B 同上 同時輸出前NUM行
-C 同上 同時輸出前後各NUM行
-e 實現多個選項間的或的關係(有正則表達式,這個基本廢了)
grep –e ‘cat ’ -e ‘dog’ fileName 文件中的有cat行,和dog的行 都可以輸出
-w 匹配整個單詞
-E 使用ERE 擴展正則表達式
-F 相當於 fgrep,不支持正則表達式

二、正則表達式

REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
程序支持: :grep,sed,awk,vim, less,nginx,varnish等
基本正則表達式 BRE
擴展正則表達式 ERE(grep –E | egrep)
正則表達式主要就是用特定的字符按他的規定組成一串 公式一樣的東西,通過他的算法去找到對應的內容

1 . 字符匹配

. 匹配任意單個字符
[ ] 匹配指定範圍內的任意單個字符
[^] 匹配指定範圍外的任意單個字符
[:alnum:] 全部字母和數字
[:alpha:] 全部字母 == A-Z,a-z
[:lower:] 全部小寫字母
[:upper:] 全部大寫字母
[:blank:] 空白字符(空格和製表符)
[:space:] 水平和垂直的空白字符 範圍更廣
[:cntrl:] 不可打印的控制字符 (退格 刪除 警鈴 )
[:digit:] 十進制數字([:xdigit:] 十六進制數字)
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號

2 .匹配次數:指定前面一個的字符出現的次數

* 匹配前面的字符任意次,包括0次 (有多少匹配多少)
.* 任意長度的任意字符
\? 匹配前面的字符 最多1次
+ 匹配前面的字符 最少1次
{n} 匹配前面的字符 n次
{m,n} 匹配前面字符至少m次,至多n次
{,n} 匹配前面的字符 最多 n 次
{n,} 匹配前面的字符最少 n次

3 .位置錨定:定位出現的位置

^ 行首錨定,用於最左側
$ 行尾錨定
^PATTERN$ 匹配整行
\< 錨定詞首 ==\b 用於單詞最左側
\>錨定詞尾==\b 用於單詞最右側
\<PATTERN\> 匹配整個單詞
() 將一個或多個字符綁定在一起 ,成爲一個組,當做一個整體進行處理。
已經匹配到的內容 在後面可以用 \1 \2 \3 這樣的變量逐一按匹配到的內容輸出
示例: (string1+(string2))
\1 :string1+(string2)

\2 :string2
以上所述是:後向引用,引用前面的分組括號裏的正則已經匹配到的字符,不是引用正則表達式本身
| 或者 示例:a|b: a 或b C|cat: C 或cat (C|c)at:Cat 或cat

操作題目:

1 .1 grep -i "^s.*" /proc/meminfo

1 .2 grep "^(s|S).*" /proc/meminfo

1 .3 grep "^[sS].*" /proc/meminfo

2 . grep -v "/bin/bash$" /etc/passwd

3 . grep -w "^rpc" /etc/passwd | cut -d: -f7

4 . cut -d: -f1,3 /etc/passwd | grep -w "[0-9]{1,3}$"

5 . grep "^[[:space:]]+.*" /etc/grub2.cfg

6 netstat -tan | grep “LISTEN[[:space:]]*$”

7 . cut -d: -f1,3 /etc/passwd | grep -o "^.*:[0-9]{1,3}$" |sort -nr -t: -k2

8 . grep "^(.):./\1$" /etc/passwd

9 . df |grep "^/dev/sd" | grep -o " [0-9]% " |grep -o "[0-9]"|sort –nr

3 . egrep 擴展正則表達式

egrep = grep –E
擴展正則表達式中,除了 \<\b \>\b ,其他的 基本正則表達式中的符號 \ 被省略

操作題目:

  1. cut -d: -f1,3,7 /etc/passwd |egrep "^(root|arno|gentoo)"
  2. egrep -o "^[[:alpha:]_[:space:]][[:space:]]()" /etc/rc.d/init.d/functions
  3. echo "/etc/rc.d/init.d/functions/" |egrep -o "[[:alnum:]]*/?$"
  4. echo "/etc/rc.d/init.d/functions/" |egrep -o "^/./[[:alnum:]]"|grep -o "^/./"
  5. last | egrep "root" |egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}" |sort -nr |uniq –c
  6. egrep -w "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
  7. ifconfig | egrep -w "([0-9]{1,3}.){3}[0-9]{1,3}"
  8. echo "welcome to magedu linux" | egrep -o "[[:lower:]]" | sort |uniq -c |sort –nr

o

egrep "[1-9][0-9]{4,9}" fileName QQ
egrep -w "^[1-9]{2}[0-9]{4}(18|19)[0-9]{2}(0[1-9]|1[0-2])([0-2][0-9]|30|31)[0-9]{3}([0-9]|x|X)" fileName ×××
egrep -w "^1[34578][0-9]{9}" fileName 手機號
egrep -w "^[[:alnum:]_]@..com" fileName 郵箱

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章