Linux學習 grep及正規表示式

2021-07-13 17:17:15 字數 4254 閱讀 1734

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

還有egrep、fgrep

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

name

grep, egrep, fgrep - print lines matching a pattern

synopsis

grep [options] pattern [file...]

grep [options] [-e pattern | -f file] [file...]

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

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

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

-i : --ignore-case   忽略大小寫

--colour[=when] : 匹配到的內容加上顏色顯示

-v :反向查詢。被模式匹配到的行不顯示,顯示沒有被匹配到的行。

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

[root@localhost ~]# grep 'root' /etc/passwd -o

root

root

root

root

*:任意長度的任意字元

?:任意單個字元

: 範圍

[^]:

預設情況下,正規表示式工作在貪婪模式下----盡可能長的匹配。

元字元:

. :任意單個字元

[root@localhost ~]# grep 'r..t' /etc/passwd

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

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

ftp:x:14:50:ftp user:/var/ftp:/sbin/nologin

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

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

字符集和:[:digit:]    [:lower:]  [:upper:]   [:space:]  

字元次數:

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

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

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

[root@localhost test]# grep 'a\?b' testabb

aaab

amnb

adb

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

[root@localhost test]# grep 'a\b' test

abaaab

[root@localhost test]# grep 'a.\b' test

aaab

amnb

adb

位置錨定:

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

[root@localhost test]# grep '^r..t' /etc/passwd

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

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

[root@localhost test]# grep '3$' /etc/inittab 

# multi-user.target: analogous to runlevel 3

^$: 空白行

[root@localhost test]# grep '[[:digit:]]$' /etc/inittab 

# multi-user.target: analogous to runlevel 3

# graphical.target: analogous to runlevel 5

錨定詞首:

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

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

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

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

分組:\(\): 將內容分組

\(ab\)*:ab匹配的次數

後向引用。分組內容可以在後續用乙個字元繼續引用。

\1: 呼叫前面第乙個左括號以及與之對應的右括號所包括的所有內容

[root@localhost test]# grep 'l..e' t2.txt 

he love his lover.

she like her liker.

he like his lover.

[root@localhost test]# grep '\(l..e\).*\1' t2.txt 

he love his lover.

she like her liker.

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

-a  n:顯示匹配到的一行,及之後的n行

[root@localhost ~]# grep  -a 2 '^core id' /proc/cpuinfo 

core id : 0

cpu cores : 2

apicid : 0

--core id : 1

cpu cores : 2

apicid : 1

--core id : 0

cpu cores : 2

apicid : 2

--core id : 1

cpu cores : 2

apicid : 3

-b n: 及其之前的n行

-c n: 及其前後各n行

擴充套件正規表示式:

字元匹配:.

[^]次數匹配:* ?

+:其前面的字元至少一次

位置錨定:^$

\<

\>

分組:()

\1,\2.....

或者:|: or  或者

[root@localhost ~]# grep -e 'c|cat' t3.txt 

catcat

cchina

[root@localhost ~]# grep -e '(c|c)at' t3.txt 

catcat

[root@localhost ~]# ifconfig | egrep '\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b'

inet 192.168.1.70 netmask 255.255.255.0 broadcast 192.168.1.255

inet6 fe80::20c:29ff:fe0c:4888 prefixlen 64 scopeid 0x20ether 00:0c:29:0c:48:88 txqueuelen 1000 (ethernet)

rx packets 23044 bytes 1640772 (1.5 mib)

tx packets 5501 bytes 962523 (939.9 kib)

[root@localhost ~]# ifconfig | egrep  '(\b([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\.)\b([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b'

inet 192.168.1.70 netmask 255.255.255.0 broadcast 192.168.1.255

inet 127.0.0.1 netmask 255.0.0.0

inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255

grep 的學習 正則

grep 命令 grep name path file name 從file name檔案中中查詢 name 字元 grep c name path file name 統計查詢到name 的總共的行數 grep n name path file name 統計查詢到name 的所在的行數 grep...

Linux學習之十grep及正規表示式(grep)

一 文字查詢的需要 grep,egrep,fgrep 1 grep 根據模式搜尋文字,並將符合模式的文字行顯示出來 pattern 模式 文字字元和正規表示式的元字元組合而成匹配條件 grep options pattern file.例 root ourlab grep root etc pass...

linux 正則化以及grep命令

cut命令 取 path路徑裡第二個 f2 c處理規整資料 grep命令 基於行操作 查詢特定字串 grep n the regular express 在regular express檔案裡查詢the,n代表顯示行號 grep vn the regular express v代表查詢沒有 the ...