grep及正規表示式

2021-08-17 15:41:24 字數 3628 閱讀 4077

grep, egrep, fgrep    

grep: 根據模式搜尋文字,並將符合模式的文字行顯示出來。

pattern: 文字字元和正規表示式的元字元組合而成匹配條件

grep [options] pattern [file...]

-i--color

-v: 顯示沒有被模式匹配到的行

-o:只顯示被模式匹配到的字串

*: 任意長度的任意字元

?: 任意單個字元

:[^]:    

正規表示式:regular expression, regexp

元字元:

.: 匹配任意單個字元

: 匹配指定範圍內的任意單個字元

[^]:匹配指定範圍外的任意單個字元

字元集合:[:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:]

匹配次數(貪婪模式):

*: 匹配其前面的字元任意次    

a, b, ab, aab, acb, adb, amnb

a*b, a?b

a.*b

.*: 任意長度的任意字元

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

\:匹配其前面的字元至少m次,至多n次\\

位置錨定:

^: 錨定行首,此字元後面的任意內容必須出現在行首

$: 錨定行尾,此字元前面的任意內容必須出現在行尾

^$: 空白行

\《或\b: 錨定詞首,其後面的任意字元必須作為單詞首部出現

\>或\b: 錨定詞尾,其前面的任意字元必須作為單詞的尾部出現

分組:

\(\)

\(ab\)*

後向引用

\1: 引用第乙個左括號以及與之對應的右括號所包括的所有內容

\2:\3:

he love his lover.

she like her liker.

he like his lover.

l..e

練習:

1、顯示/proc/meminfo檔案中以不區分大小的s開頭的行;

grep -i '^s' /proc/meminfo

grep '^[ss]' /proc/meminfo

2、顯示/etc/passwd中以nologin結尾的行;

grep 'nologin$' /etc/passwd

取出預設shell為/sbin/nologin的使用者列表

grep "nologin$' /etc/passwd | cut -d: -f1

取出預設shell為bash,且其使用者id號最小的使用者的使用者名稱

grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1

3、顯示/etc/inittab中以#開頭,且後面跟乙個或多個空白字元,而後又跟了任意非空白字元的行;

grep "^#[[:space:]]\[^[:space:]]" /etc/inittab

4、顯示/etc/inittab中包含了:乙個數字:(即兩個冒號中間乙個數字)的行;

grep ':[0-9]:' /etc/inittab

5、顯示/boot/grub/grub.conf檔案中以乙個或多個空白字元開頭的行;

grep '^[[:space:]]\' /boot/grub/grub.conf

6、顯示/etc/inittab檔案中以乙個數字開頭並以乙個與開頭數字相同的數字結尾的行;

grep '^\([0-9]\).*\1$' /etc/inittab

練習:1、找出某檔案中的,1位數,或2位數;

grep '[0-9]\' /proc/cpuinfo

grep --color '\<[0-9]\\>' /proc/cpuinfo

2、找出ifconfig命令結果中的1-255之間的整數;

ifconfig | egrep '\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'

ifconfig | egrep --color '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.)\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'

3、查詢當前系統上名字為student(必須出現在行首)的使用者的帳號的相關資訊, 檔案為/etc/passwd

grep '^student\>' /etc/passwd | cut -d: -f3

id -u student

student1

student2

練習:分析/etc/inittab檔案中如下文字中前兩行的特徵(每一行中出現在數字必須相同),請寫出可以精確找到類似兩行的模式:

l1:1:wait:/etc/rc.d/rc 1

l3:3:wait:/etc/rc.d/rc 3

grep '^l\([0-9]\):\1.*\1$' /etc/inittab

regexp:regular expression

pattern:

正規表示式:

basic regexp:基本

extended regexp:擴充套件

基本正規表示式:

.: :

[^]:

次數匹配:

*: \?: 0或1次

\:至少m次,至多n次;

.*:

錨定:^:

$:\<, \b:

\>, \b:

\(\)

\1, \2, \3, ...

grep:使用基本正規表示式定義的模式來過濾文字的命令;

-i-v

-o--color

-e: 使用擴充套件正規表示式

-a #:

-b #:

-c #:

擴充套件正規表示式:

字元匹配:.

[^]次數匹配:

*: ?:

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

位置錨定:^$

\<

\>

分組:():分組

\1, \2, \3, ...

或者|: or

c|cat: cat或cat, c或cat

grep -e = egrep

grep 及 正規表示式

grep 根據模式搜尋文字,並將符合模式的文字行顯示出來。pattern 文字字元和正規表示式的元字元組合而成的匹配條件 i 忽略大小寫 color 顯示標註顏色 v 顯示沒有被模式匹配到的行 o 只顯示被匹配到的字串 任意長度的任意字元 任意單個字元 指定範圍內的 指定範圍外的 元字元 匹配任意單...

grep及正規表示式

grep grep global search regular expression and print out the line 作用 文字搜尋工具,根據使用者指定的 模式 對目標文字逐行進行匹配檢查 列印匹配搭配的行 模式 由正規表示式字元及文字字元所編寫的過濾條件 正規表示式 regexp 由...

grep 及正規表示式

grpe 及正規表示式 文字查詢的需要 grep,egrep,fgrep grep 根據模式,搜尋文字,並將符合模式的文字行顯示出來。pattern 文字字元以及正規表示式的元字元組合而成的匹配條件 grep options pattern file.i 忽略大小寫 color 顏色突出顯示 v 顯...