最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux系統(tǒng)中正則表達(dá)式詳解(含grep命令+實(shí)操案例)

 更新時(shí)間:2026年07月07日 10:53:28   作者:蜀道山老天師  
grep是linux系統(tǒng)中的一個(gè)強(qiáng)大的文本搜索工具,可以按照正則表達(dá)式搜索文本,并把匹配到的行打印出來,這篇文章主要介紹了Linux系統(tǒng)中正則表達(dá)式(含grep命令+實(shí)操案例)的相關(guān)資料,需要的朋友可以參考下

前言

在Linux系統(tǒng)中,grep是最常用、最強(qiáng)大的文本搜索工具之一,核心功能是使用正則表達(dá)式(或普通字符串)搜索目標(biāo)文本,并將匹配的行打印輸出。無論是日常排查日志、篩選配置文件,還是批量處理文本,grep都是必備工具。本文將從基礎(chǔ)用法、核心選項(xiàng)、正則表達(dá)式、grep命令族、通配符等方面,結(jié)合實(shí)操案例詳細(xì)講解grep的使用方法,新手也能快速上手。

一、grep命令基礎(chǔ)語法

grep命令的基本格式非常簡潔,核心由「選項(xiàng)+匹配模式+目標(biāo)文件」三部分組成,語法如下:

grep [選項(xiàng)] [匹配模式] [文件...]

關(guān)鍵說明:

  • 選項(xiàng)(可選):用于調(diào)整搜索行為,比如忽略大小寫、顯示行號(hào)等,下文會(huì)詳細(xì)列舉。

  • 匹配模式(必填):可以是普通字符串、變量,也可以是正則表達(dá)式。注意:如果模式中包含空格,必須用雙引號(hào)("")將模式括起來,否則會(huì)被Shell解析為多個(gè)參數(shù)。

  • 文件(必填):可以指定單個(gè)文件、多個(gè)文件,也可以使用通配符(如*.txt)匹配一批文件。

演示示例:

grep "root" test.txt

test.txt內(nèi)容如下:

hello world
helo linux
hellllllo cloud
Cloud Service
123abc測(cè)試文本
xcb738 demo
4J973U data
iivey program
Iivey Code
the book is good
them are apples
yes YES Yes
B-Pk-y test
admin@163.com
JOOB test
JOOOB linux
JOOOOOB centos
aaaa123ABC
root:x:0:0:root:/root:/bin/bash
nginx server start
# 這是一行注釋內(nèi)容
micky
web service user certificate
user login success
ERROR: connection refused

二、grep核心選項(xiàng)詳解(附案例)

grep的選項(xiàng)眾多,以下是日常工作中最常用的核心選項(xiàng),結(jié)合表格和實(shí)操案例說明,方便大家直接套用:

選項(xiàng)

核心意義

實(shí)操案例

-c

只輸出匹配行的數(shù)量,不顯示具體匹配內(nèi)容

grep -c "root" /etc/passwd(統(tǒng)計(jì)/etc/passwd中包含root的行數(shù))

-i

搜索時(shí)忽略大小寫,不區(qū)分大寫和小寫字母

grep -i "linux" test.txt(匹配Linux、LINUX、linux等所有大小寫組合)

-h

查詢多個(gè)文件時(shí),不顯示匹配內(nèi)容所屬的文件名

grep -h "error" *.log(搜索所有.log文件中的error,不顯示文件名)

-l

只列出包含匹配內(nèi)容的文件名,不顯示具體匹配行

grep -l "test" /home/*(列出/home目錄下包含test的所有文件)

-n

顯示所有匹配行,并標(biāo)注該行在文件中的行號(hào)(非常實(shí)用)

grep -n "nginx" /etc/nginx/nginx.conf(顯示匹配nginx的行及行號(hào))

-s

不顯示“文件不存在”或“無匹配內(nèi)容”的錯(cuò)誤信息,避免輸出冗余

grep -s "test" a.txt b.txt(即使a.txt不存在,也不會(huì)報(bào)錯(cuò))

-v

反向匹配:顯示不包含匹配模式的所有行(常用排查排除)

grep -v "^#" /etc/profile(過濾掉/etc/profile中以#開頭的注釋行)

-w

匹配整詞,避免部分匹配(比如匹配test,不會(huì)匹配test123、atest)

grep -w "test" test.txt(只匹配獨(dú)立的test單詞)

-r

遞歸搜索:不僅搜索當(dāng)前工作目錄,還會(huì)遞歸搜索所有子目錄下的文件

grep -r "error" /var/log/(遞歸搜索/var/log目錄下所有包含error的文件)

-E

支持?jǐn)U展正則表達(dá)式(等價(jià)于egrep),無需對(duì)元字符轉(zhuǎn)義

grep -E "a|b" test.txt(匹配包含a或b的行)

-F

不支持正則表達(dá)式,按照字符串字面意思匹配(等價(jià)于fgrep),速度更快

grep -F "a*b" test.txt(匹配字面量a*b,不把*當(dāng)作元字符)

補(bǔ)充案例(模式含空格的情況):

# 錯(cuò)誤用法:模式含空格,未加引號(hào),Shell會(huì)把 user 當(dāng)作匹配詞,certificate、test.txt 當(dāng)作文件
grep user certificate test.txt
 
# 正確用法:匹配字符串包含空格,必須用雙引號(hào)包裹
grep "user certificate" test.txt

三、grep命令族詳解

Linux系統(tǒng)中,grep并非單一命令,而是一個(gè)“命令族”,包含三種常用形式,核心區(qū)別在于對(duì)正則表達(dá)式的支持程度,具體如下:

  • grep(標(biāo)準(zhǔn)grep):默認(rèn)支持基本正則表達(dá)式(BRE),部分元字符(如+、?、|等)需要用反斜杠(\)轉(zhuǎn)義才能生效。

grep "a\{2\}" test.txt # 匹配 aa

  • egrep(擴(kuò)展grep):支持基本正則表達(dá)式和擴(kuò)展正則表達(dá)式(ERE),無需對(duì)擴(kuò)展元字符轉(zhuǎn)義,等價(jià)于 grep -E。

egrep "a+" test.txt # 匹配 a、aa、aaa

  • fgrep(快速grep):不支持任何正則表達(dá)式,僅按照字符串字面意思匹配,速度最快,等價(jià)于 grep -F

fgrep "a*b" test.txt # 只匹配文本 a*b

總結(jié):日常使用中,若需使用擴(kuò)展正則,優(yōu)先用 grep -E(比egrep更通用);若只需匹配固定字符串,用 grep -F(速度更快)。

四、grep與正則表達(dá)式(核心重點(diǎn))

grep的強(qiáng)大之處在于支持正則表達(dá)式,正則表達(dá)式(簡稱RE)是由普通字符和元字符組成的字符串,用于精準(zhǔn)匹配文本模式。下面分「基礎(chǔ)正則」「擴(kuò)展正則」「POSIX字符類」三部分講解,結(jié)合案例更易理解。

4.1 正則表達(dá)式基礎(chǔ)

正則表達(dá)式由「普通字符」和「元字符」組成:

  • 普通字符:無特殊含義,按字面意思匹配,如a、b、1、2、linux等。

  • 元字符:被Shell賦予特殊含義,用于靈活匹配文本,如*、^、$、[]等(下文詳細(xì)說明)。

grep "hello" test.txt

一個(gè)完整的正則表達(dá)式,通常包含以下一種或多種元素:

  • 字符集:僅包含普通字符,是最簡單的正則形式(如“linux”)。

  • 錨:指定匹配內(nèi)容在文本行中的位置(如行首、行尾)。

  • 修飾符:擴(kuò)大或縮小匹配范圍(如重復(fù)次數(shù)、轉(zhuǎn)義)。

grep "^abc" test.txt

4.2 基礎(chǔ)正則元字符(grep默認(rèn)支持)

以下是grep默認(rèn)支持的基礎(chǔ)正則元字符,每一個(gè)都配實(shí)操案例,方便直接測(cè)試:

元字符

核心意義

案例說明

*

匹配前面的普通字符0次或多次

hel*o:匹配heo(l出現(xiàn)0次)、helo(l出現(xiàn)1次)、hello(l出現(xiàn)2次)等

.

匹配任意一個(gè)字符(除了換行符)

...73.:匹配前3個(gè)任意字符、中間為73、最后1個(gè)任意字符(如xcb738、4J973U)

^

匹配行首,即行的第一個(gè)字符是^后面的字符

^cloud:匹配所有以cloud開頭的行;^$:匹配空白行(無任何字符)

$

匹配行尾,即行的最后一個(gè)字符是$前面的字符

micky$:匹配所有以micky結(jié)尾的行

[]

匹配中括號(hào)內(nèi)的任意一個(gè)字符;^在括號(hào)內(nèi)表示取反

1. [xyz]:匹配x、y、z中的任意一個(gè);2. [c-n]:匹配c到n之間的任意字符;3. [^b-d]:匹配b到d之外的任意字符

\

轉(zhuǎn)義符:屏蔽元字符的特殊含義,使其按字面意思匹配

\$:匹配字面量$(不表示行尾);\\:匹配字面量\

\<\>

精確匹配單詞邊界(需轉(zhuǎn)義),僅匹配獨(dú)立的單詞

\<the\>:匹配獨(dú)立的the,不匹配them、there、other等

\{}系列

匹配前面字符的指定重復(fù)次數(shù)(需轉(zhuǎn)義)

1. \{n\}:匹配n次(如JO\{3\}B:匹配JOOOB);2. \{n,\}:至少匹配n次;3. \{n,m\}:匹配n到m次

實(shí)操案例:

# 匹配包含5個(gè)小寫字母的行
grep "[a-z]\{5\}" test.txt   

# 匹配不包含小寫字母的行
grep "[^a-z]" test.txt

# 精確匹配單詞iivey
grep "\<iivey\>" test.txt

4.3 擴(kuò)展正則元字符(需加-E選項(xiàng))

擴(kuò)展正則元字符在基礎(chǔ)正則的基礎(chǔ)上增加了更靈活的匹配規(guī)則,需使用 grep -E(或egrep)才能支持,無需對(duì)元字符轉(zhuǎn)義,具體如下:

元字符

核心意義

案例說明

?

匹配前面的普通字符0次或1次(區(qū)別于*,不能匹配多次)

grep -E "iivey?" exp1.txt(匹配iivey或iive)

+

匹配前面的普通字符1次或多次(區(qū)別于*,不能匹配0次)

grep -E "hel+o" test.txt(匹配helo、hello等,不匹配heo)

()

括起一組正則表達(dá)式,作為一個(gè)整體匹配

grep -E "(ab)+" test.txt(匹配ab、abab、ababab等)

|

“或”操作符,匹配多個(gè)選項(xiàng)中的任意一個(gè)

grep -E "a|b|c" test.txt(匹配包含a、b或c的行)

grep -E "cat|dog" test.txt

4.4 POSIX字符類(適配多字符編碼)

為了保持不同國家字符編碼的一致性,POSIX(可移植操作系統(tǒng)接口)定義了特殊的字符類,格式為 [:classname:],grep完全支持,使用時(shí)需用引號(hào)或雙中括號(hào)([[ ]])引起來。

POSIX字符類

等價(jià)寫法

核心意義

[:upper:]

[A-Z]

匹配所有大寫英文字母

[:lower:]

[a-z]

匹配所有小寫英文字母

[:digit:]

[0-9]

匹配所有阿拉伯?dāng)?shù)字

[:alnum:]

[0-9a-zA-Z]

匹配所有大小寫字母和阿拉伯?dāng)?shù)字

[:space:]

匹配空格或Tab鍵

[:alpha:]

[a-zA-Z]

匹配所有大小寫英文字母

[:xdigit:]

[0-9A-Fa-f]

匹配所有16進(jìn)制數(shù)字

實(shí)操案例:

# 匹配包含數(shù)字的行
grep '[[:digit:]]' test.txt   

# 匹配包含大寫字母的行
grep '[[:upper:]]' test.txt

五、通配符(globbing)與正則元字符的區(qū)別

很多新手會(huì)混淆「通配符」和「正則元字符」,兩者的核心區(qū)別的是:通配符用于匹配文件名,正則元字符用于匹配文本內(nèi)容。

通配符(globbing)是將包含通配符的非具體文件名,擴(kuò)展為一批具體文件名的過程,常用通配符及含義如下(與正則元字符含義不同):

  • *:匹配任意位數(shù)的任意字符(區(qū)別于正則中的“重復(fù)匹配”)。

  • ?:匹配任意一位字符(區(qū)別于正則中的“0次或1次匹配”)。

  • ^:在通配符中表示“取反”(區(qū)別于正則中的“行首匹配”)。

  • []:匹配中括號(hào)內(nèi)的任意一個(gè)字符(與正則中[]含義一致)。

  • {}:匹配括號(hào)內(nèi)的任意一個(gè)字符串(批量匹配)。

實(shí)操案例(通配符常用場景):

# 列出當(dāng)前目錄下所有.sh后綴的文件(*匹配任意字符)
ls -l *.sh
 
# 列出當(dāng)前目錄下以mytest開頭、后面跟1個(gè)任意字符、.sh結(jié)尾的文件
ls -l mytest?.sh
 
# 列出當(dāng)前目錄下以e或m開頭、任意后綴(非.sh)的文件
ls [em]*.[^sh]*
 
# 列出當(dāng)前目錄下以m或b開頭、.sh結(jié)尾的文件({}批量匹配)
ls {m,b}*.sh
 
# 批量創(chuàng)建1.doc到10.doc的文件
mkdir {1..10}.doc

六、常見實(shí)操場景匯總(必看)

結(jié)合前面的知識(shí)點(diǎn),整理幾個(gè)日常工作中最常用的grep實(shí)操場景,直接復(fù)制即可使用:

1.過濾配置文件注釋行(排除#開頭和空白行): 

grep -v "^#" /etc/nginx/nginx.conf | grep -v "^$"

2.遞歸搜索日志中的錯(cuò)誤信息,并顯示行號(hào):

grep -rn "error" /var/log/nginx/

3.統(tǒng)計(jì)日志中包含“success”的行數(shù)(忽略大小寫): 

grep -ci "success" /var/log/access.log

4.匹配包含數(shù)字或大寫字母的行: 

grep -E '[[:digit:]]|[[:upper:]]' test.txt

5.列出當(dāng)前目錄及子目錄下,包含“test”的所有文件: 

grep -rl "test" ./

七、常見易錯(cuò)點(diǎn)總結(jié)

  • 模式含空格時(shí),必須用雙引號(hào)括起來,否則Shell會(huì)解析錯(cuò)誤。

  • 基礎(chǔ)正則中,+、?、|、()等元字符需轉(zhuǎn)義(\),擴(kuò)展正則(grep -E)無需轉(zhuǎn)義。

  • 通配符和正則元字符含義不同:通配符匹配文件名,正則匹配文本內(nèi)容。

  • -r選項(xiàng)是遞歸搜索目錄,不是遞歸匹配文本內(nèi)容;-w選項(xiàng)是匹配整詞,不是匹配單詞的一部分。

  • POSIX字符類需用引號(hào)或雙中括號(hào)引起來,否則無法生效。

總結(jié):grep命令的核心是“匹配模式”,掌握正則表達(dá)式和常用選項(xiàng),就能靈活應(yīng)對(duì)各種文本搜索場景。建議大家結(jié)合本文案例,實(shí)際操作測(cè)試,加深記憶。如果有其他用法或疑問,歡迎在評(píng)論區(qū)補(bǔ)充交流~

到此這篇關(guān)于Linux系統(tǒng)中正則表達(dá)式詳解(含grep命令+實(shí)操案例)的文章就介紹到這了,更多相關(guān)Linux正則表達(dá)式grep命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

灵台县| 宁化县| 凌源市| 五华县| 铅山县| 绥棱县| 抚远县| 南和县| 台州市| 鄂托克旗| 开化县| 扬州市| 黑山县| 社会| 讷河市| 同江市| 丹棱县| 五华县| 吉林市| 札达县| 靖边县| 库尔勒市| 丰镇市| 岑巩县| 盱眙县| 嵩明县| 仙游县| 横山县| 夏津县| 库车县| 阆中市| 房产| 怀化市| 瑞安市| 阿拉善左旗| 英德市| 舞钢市| 公主岭市| 从江县| 东丽区| 闸北区|