日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于grep,egrep正则表达式的常用用法

發(fā)布時間:2025/3/8 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于grep,egrep正则表达式的常用用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

正則表達式是一類字符所書寫的模式(pattern)

元字符:不表示字符本身的意義,而用于額外功能性的描述;而如果在這些特定的字符前加/這個符號那么這些字符就表示原有的意思。



正則表達式:基本正則表達式和擴展正則表達式

grep [opinions] 'pattern' FILENAME

"pattern"和'pattern'單雙引號的區(qū)別:單雙引號就是對變量引用的區(qū)別""能引號變量直,''不引用

grep默認支持基本正則表達式

首先先講解基本正則表達式的pattern的一些常用用法

首先定義alias grep="grep --color=auto"

^:錨定行首的符合條件的內(nèi)容,用法格式“^pattern”;

例:

[root@localhost ~]# grep "^root" /etc/passwd

root:x:0:0:root:/root:/bin/bash


$: 錨定行尾的符合條件的內(nèi)容,用法格式“pattern$”;

^$: 空白行

.: 匹配任意單個字符,就像通配符里面的?用法

*:匹配緊挨在其前面的字符任意次;這個與通配符里面的*有區(qū)別。通配符的*=正則表達式的.*

a*b: ab, aab, acb(整個不匹配,但會顯示出來), b

.*: 匹配任意長度的任意字符

[]:匹配指定范圍內(nèi)的任意單個字符

[^]:匹配指定范圍外的任意單個字符,下面還有個關于grep的選項-v也是取反。但兩者是有區(qū)別的。

1:[^]后面要接字符 -v可以接空白行(^$),[^]經(jīng)試驗不行要出錯

2:[^]接單個字符后,比如有一串字符abcde,[^a]后其仍然要顯示,而-v不顯示。

[a-z], [A-Z], [0-9]

[:lower:] a-z

[:upper:] A-Z

[:digit:]所有數(shù)字

[:alpha:]所有字母

[:alnum:]所有字母和數(shù)字

[:space:]

[:punct:]所有符號


grep "r[0-9].*h" /etc/passwd

表示顯示以r開頭后面緊跟一個數(shù)字中間任意長的字符串再以h結尾,值得一提的是如果一個字符串像這樣:adr1sdahdfadh它會顯示:adr1sdahdfadh而非adr1sdahdfadh。這是貪婪模式(盡可能長地去匹配符合模式的內(nèi)容)

\?: 匹配緊挨在其前面的字符0次或1次;

a\?b(表示b前面有0或1個a能全部匹配): ab, aab, acb, b

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

\{0,n\}: 至多n次;0-n次;(n要寫個數(shù)字)

\{m,\}:至少m次

\{m\}: 精確匹配m次;

a\{1,3\}b: b, ab, aab, aaab, aaaaaab, acb

grep "[bB].\{2,5\}[tT]": Boot, B123T, bxy12T

\<: 錨定詞首,用法格式:\<pattern

\b: \bpattern

\>: 錨定詞尾,用法格式:pattern\>

\b: pattern\b

\<pattern\>:錨定單詞

grep "\<root\>" /etc/passwd


\(\): 分組,用法格式: \(pattern\)

\(ab\)\{1,3\}: ab, aab, abb, abab, ababab,

ab任意字符ab:ab.*ab

a.b任意字符a.b: \(a.b\).*\1


grep的選項:

--color=auto

export GREP_COLOR='01;36'

-v: 反向選取,只顯示不符合模式的行;

前面已經(jīng)提到過:grep -v "^$" /etc/rc.d/rc.sysinit 不顯示空白行

-o: 只顯示被模式匹配到的字串,而不是整個行;

-i: 不區(qū)分字符大小寫;


-A #:顯示匹配到的行時,順帶顯示其后面的#個行;

-A 2

-B #:前面的#行;

-C #:前后的#行;


-E: 使用擴展的正則表達式

grep -E = egrep

擴展正則表達式:

.: 任意單個字符

[]: 匹配任意范圍內(nèi)單個字符

a|b: 二選一;

例:egrep "[ab]" = egrep "a|b"

[^]:匹配指定外的任意單個字符

*:

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

?: 0次或一次

{m,n}: 至少m次,至多n次;

():分組,支持引用\1, \2;

\<

\>

^

$


grep -E = egrep


grep "(c|C)at" /root/test.txt

cat, Cat

c, Cat




練習:

顯示/etc/rc.d/rc.sysinit中以#開頭,且后面跟一個或多個空白字符,而后又跟了任意非空白字符的行;

[[:space:]], [^[:space:]]


顯示/proc/meminfo文件中以不區(qū)分大小的s開頭的行;

# grep "^[Ss]" /proc/meminfo


顯示/etc/rc.d/rc.sysinit中符合形為“任意單個字符n任意字符任意單個字符n”模式的行;即任意單個字符后面跟了個n,n后面有任意長度的任意字符,而后是任意單個字符后面跟了個n;


.n.*.n


顯示/etc/rc.d/rc.sysinit中符合形為“任意單個字符n任意字符任意單個字符n”模式的行;即任意單個字符后面跟了個n,n后面有任意長度的任意字符,而后是任意單個字符后面跟了個n,但后面的n之前的字符要與前面的n之前的字符相同;

\(.n\).*\1


顯示/boot/grub/grub.conf文件中以一個或多個空白字符開頭的行;

^[[:space:]]\{1,\}


轉(zhuǎn)載于:https://blog.51cto.com/nickzhao/1316455

總結

以上是生活随笔為你收集整理的关于grep,egrep正则表达式的常用用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。