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

2021-07-31 20:08:20 字數 3459 閱讀 9421

一、文字查詢的需要:

grep,egrep,fgrep

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

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

grep [options] pattern [file...]

例:[root@ourlab ~]# grep 'root' /etc/passwd

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

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

-i:忽略大小寫

--colour:匹配的字元或字串加顏色

例:[root@ourlab ~]# grep --colour 'root' /etc/passwd

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

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

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

-o:只顯示被匹配的字串,且以行顯示

例:[root@ourlab ~]# grep -o 'root' /etc/passwd

root

root

root

root

2、萬用字元:

*:任意長度的任意字元

?:任意單個字元

:任意範圍內的字元

[^]:任意範圍外字元

3、正規表示式:regular expression(regexp)

元字元:

.:匹配任意單個字元

例:[root@ourlab ~]# 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:]大寫字母,[:punct:]標點符號,[:space:]空格,[:alpha:]所有字母,[:alnum:]所有字母和數字

例:顯示/etc/inittab中以數字結尾的行

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

#   5 - x11

l0:0:wait:/etc/rc.d/rc 0

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

字元次數:

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

例:建立乙個檔案test.txt,內容為:a,b,ab,aab,acb,adb,amnb,amnbmnb,使用「a*b」進行匹配顯示的字元如下:

[root@ourlab ~]# grep 'a*b' test.txtbab

aabacb

adbamnb

amnbmnb

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

例:[root@ourlab ~]# grep 'a.*b' test.txt

abaab

acbadb

amnb

amnbmnb

\?:匹配其前面的字元1次或0次(使用時需要加轉義符\)

例:[root@ourlab ~]# grep 'a\?b' test.txtbab

aabacb

adbamnb

amnbmnb

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

例:[root@ourlab ~]# grep 'a\b' test.txt

abaab

位置錨定:

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

例:[root@ourlab ~]# grep '^r..t' /etc/passwd

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

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

例:[root@ourlab ~]# grep 'w$' /etc/inittab

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

^$:空白行

例:[root@ourlab ~]# grep '^$' /etc/inittab

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

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

\<\>或\b\b:其指定的字元必須作為單詞出現

例:建立乙個檔案test2.txt,內容:this is    root.the user is mroot.rooter is a dog's name.chroot is a command.mrooter    is not a word.

例1:[root@ourlab ~]# grep "root\>" test2.txt

this is root.

the user is mroot.

chroot is a command.

分組:\(\):用於後向引用

例:\(ab\)*:ab作為一組同時出現或不出現

[root@ourlab ~]# grep --colour "\(ab\)" test.txt

abaab

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

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

例:建立乙個檔案test3.txt檔案內容如下:

he love his lover.

she like her lover.

he like his liker.

she love her liker.

she like him.

[root@ourlab ~]# grep '\(l..e\).*\1' test3.txt

he love his lover.

he like his liker.

課後練習:

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

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

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

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

l0:0:wait:/etc/rc.d/rc 0

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

l2:2:wait:/etc/rc.d/rc 2

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

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

Linux學習之grep命令

參考資料 root www dmesg grep n a3 b2 color auto eth 245 pci setting irq 10 as level triggered 246 acpi pci interrupt 0000 00 0e.0 a link lnkb 247 eth0 rea...

Linux命令學習之grep命令

格式 grep options pattern file grep命令堆在輸入或指定的檔案中查詢包含匹配指定模式的字元的行。grep的輸出就是包含了匹配模式的行。原始檔內容 ocetl yxddn65 demo more file12 46315 9510 ocetl yxddn65 demo gr...

linux之cp命令grep命令學習

cp命令就是在linux下對檔案複製的乙個命令,功能很強大啊。其命令格式如下 cp 複製檔案或目錄 cp adfilprsu source destination cp options source1 source2 source3 directory 引數 a 相當於 pdr 的意思 d 若 檔案...