grep正規表示式

2021-07-15 03:03:24 字數 3528 閱讀 4132

文字查詢需要

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

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

man grep:檢視幫助

查詢/etc/passwd檔案包含root的內容;

[root@iz233y80y23z ~]# grep 'root' /etc/passwd

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

operator:x:11:0:operator:/root:/sbin/nologin

grep [option] [pattern] file

--color:高亮顏色;alias grep="grep --color"

-i:忽略大小寫;

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

-o:只顯示被模式匹配到的串本身。每個串顯示為一行。

正規表示式
regular expression,regexp;

正常預設情況,grep 工作在貪婪模式,盡可能多的匹配。

.*:任意字元。

元字元:

.:匹配任意單個字元

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

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

[:digit:]:數字匹配;[:lower:]:小寫字母;[:upper:]大寫字母;[:punct:]:符號

[:space:]:所有空格;[:alpha:]:所有字母;[:alnum:]所有數字字母;

eg:[root@iz233y80y23z ~]# grep '[[:digit:]]$' /etc/inittab

# multi-user.target: analogous to runlevel 3

# graphical.target: analogous to runlevel 5

匹配次數:

*:匹配其前面的字元任意次;a*b:a出現任意次後面加上b;跟檔案通配不同;注意;

\?:匹配其前面字元1次或者0次;需要轉義字元\;grep 'a\?b' grep.txt

\+:匹配其前面字元出現至少一次。需要轉義字元\;grep 'a\+b' grep.txt

\:匹配其前面字元出現該範圍區間的。grep 'a\b' grep.txt

位置錨定:

^:錨定行首,此字元後面的任意內容必須出現在行首。grep '^r..t' /etc/passwd

$:錨定行尾,此字元前面的任意內容必須出現在行尾。grep 'bash$' /etc/passwd

^$:空白行。# grep '^$' /etc/bashrc | wc -l

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

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

\:root必須作為單詞的首部或者尾部;

eg:[root@iz233y80y23z test]# cat word.txt

this is root.

the user is mroot

rooter is a dog,s name

chroot is command

mrooter is dog

root is my dd

[root@iz233y80y23z test]# grep '\' word.txt

this is root.

root is my dd

eg:[root@iz233y80y23z test]# cat grep.txt ab

abaab

acbadb

amnb

grep 'a\?b' grep.txt

分組:\(\):在後面能引用到

\(ab\)*:ab這個分組可以出現零次一次或者n次;grep '\(ab\)*' grep.txt

後向引用:

\1:第乙個左括號以及與之對應的右括號所包含的所有內容。# grep '\(l..e\).*\1' lover.txt

\2:第二個括號。

eg:[root@iz233y80y23z test]# cat lover.txt

he love his lover

she like her lover

he like his liker

she love his lover

egrep及擴充套件正規表示式
正規表示式;basic regexp;擴充套件正規表示式:extended regexp;擴充套件。大多數支援基本正規表示式。

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

-i:忽略大小寫;-v:表示顯示沒有匹配行。--color;

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

-a #n:當某一行被grep匹配到的時候,下面的n行同時顯示。

#grep -a 2 '^core id' /proc/cpuinfo

-b #n:當某乙個行被grep匹配到的時候,上面n行同時顯示

-c #n:當某一行被grep匹配到的時候,上下n行同時顯示。

擴充套件的正規表示式:-e擴充套件;grep -e = egrep

字元匹配:.,,[^]

次數匹配:*,?:不需要加反斜線。+:匹配其前面字元至少一次。

錨定字元相同:^,$,\<,\>

分組:():不需要加反斜線,真正分組的意義;

\1,\2,\3

或者:a|b:or或者的意思。c|cat:c或者cat,匹配的是整個左邊或者右邊;(c|c)at:cat或者cat;

eg:grep --color -e '^[[:space:]]+' /boot/grub/grub.conf:至少乙個空白字元開頭。

查詢1-255之間的數字;必須是單個單詞出現的。

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

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

'\<([1-9]|[1-9][0-9]|1[0-9]|2[0-1][0-9]|22[0-3])\>(\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9])\>)\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>'

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

fgrep:fast grep快速匹配。
不支援正規表示式。速度比較快。

grep正規表示式

grep的工作方式是這樣的,它在乙個或多個檔案中搜尋字串模板。如果模板包括空格,則必須被引用,模板後的所有字串被看作檔名。搜尋的結果被送到螢幕,不影響原檔案內容。grep可用於shell指令碼,因為grep通過返回乙個狀態值來說明搜尋的狀態,如果模板搜尋成功,則返回0,如果搜尋不成功,則返回1,如果...

Grep正規表示式

grep正規表示式 要用好grep這個工具,其實就是要寫好正規表示式,所以這裡不對grep的所有功能進行例項講解,只列幾個例子,講解乙個正規表示式的寫法。ls l grep a 通過管道過濾ls l輸出的內容,只顯示以a開頭的行。grep test d 顯示所有以d開頭的檔案中包含test的行。gr...

grep 正規表示式

1 或操作 grep e 123 abc filename 找出檔案 filename 中包含123或者包含abc的行 egrep 123 abc filename 用egrep同樣可以實現 awk 123 abc filename awk 的實現方式 2 與操作 grep pattern1 fil...