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

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

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

前言

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

一、grep命令基礎語法

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

grep [選項] [匹配模式] [文件...]

關鍵說明:

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

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

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

演示示例:

grep "root" test.txt

test.txt內容如下:

hello world
helo linux
hellllllo cloud
Cloud Service
123abc測試文本
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
# 這是一行注釋內容
micky
web service user certificate
user login success
ERROR: connection refused

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

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

選項

核心意義

實操案例

-c

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

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

-i

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

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

-h

查詢多個文件時,不顯示匹配內容所屬的文件名

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

-l

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

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

-n

顯示所有匹配行,并標注該行在文件中的行號(非常實用)

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

-s

不顯示“文件不存在”或“無匹配內容”的錯誤信息,避免輸出冗余

grep -s "test" a.txt b.txt(即使a.txt不存在,也不會報錯)

-v

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

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

-w

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

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

-r

遞歸搜索:不僅搜索當前工作目錄,還會遞歸搜索所有子目錄下的文件

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

-E

支持擴展正則表達式(等價于egrep),無需對元字符轉義

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

-F

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

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

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

# 錯誤用法:模式含空格,未加引號,Shell會把 user 當作匹配詞,certificate、test.txt 當作文件
grep user certificate test.txt
 
# 正確用法:匹配字符串包含空格,必須用雙引號包裹
grep "user certificate" test.txt

三、grep命令族詳解

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

  • grep(標準grep):默認支持基本正則表達式(BRE),部分元字符(如+、?、|等)需要用反斜杠(\)轉義才能生效。

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

  • egrep(擴展grep):支持基本正則表達式和擴展正則表達式(ERE),無需對擴展元字符轉義,等價于 grep -E。

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

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

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

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

四、grep與正則表達式(核心重點)

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

4.1 正則表達式基礎

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

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

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

grep "hello" test.txt

一個完整的正則表達式,通常包含以下一種或多種元素:

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

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

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

grep "^abc" test.txt

4.2 基礎正則元字符(grep默認支持)

以下是grep默認支持的基礎正則元字符,每一個都配實操案例,方便直接測試:

元字符

核心意義

案例說明

*

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

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

.

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

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

^

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

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

$

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

micky$:匹配所有以micky結尾的行

[]

匹配中括號內的任意一個字符;^在括號內表示取反

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

\

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

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

\<\>

精確匹配單詞邊界(需轉義),僅匹配獨立的單詞

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

\{}系列

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

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

實操案例:

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

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

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

4.3 擴展正則元字符(需加-E選項)

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

元字符

核心意義

案例說明

?

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

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

+

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

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

()

括起一組正則表達式,作為一個整體匹配

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

|

“或”操作符,匹配多個選項中的任意一個

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

grep -E "cat|dog" test.txt

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

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

POSIX字符類

等價寫法

核心意義

[:upper:]

[A-Z]

匹配所有大寫英文字母

[:lower:]

[a-z]

匹配所有小寫英文字母

[:digit:]

[0-9]

匹配所有阿拉伯數(shù)字

[:alnum:]

[0-9a-zA-Z]

匹配所有大小寫字母和阿拉伯數(shù)字

[:space:]

匹配空格或Tab鍵

[:alpha:]

[a-zA-Z]

匹配所有大小寫英文字母

[:xdigit:]

[0-9A-Fa-f]

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

實操案例:

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

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

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

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

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

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

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

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

  • []:匹配中括號內的任意一個字符(與正則中[]含義一致)。

  • {}:匹配括號內的任意一個字符串(批量匹配)。

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

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

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

結合前面的知識點,整理幾個日常工作中最常用的grep實操場景,直接復制即可使用:

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

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

2.遞歸搜索日志中的錯誤信息,并顯示行號:

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

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

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

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

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

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

grep -rl "test" ./

七、常見易錯點總結

  • 模式含空格時,必須用雙引號括起來,否則Shell會解析錯誤。

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

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

  • -r選項是遞歸搜索目錄,不是遞歸匹配文本內容;-w選項是匹配整詞,不是匹配單詞的一部分。

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

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

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

相關文章

最新評論

龙海市| 大宁县| 吉木乃县| 鸡泽县| 阿拉善左旗| 通海县| 柳河县| 青田县| 诏安县| 黑山县| 玛纳斯县| 沁水县| 大安市| 汾西县| 新宾| 清镇市| 万山特区| 会宁县| 独山县| 禹州市| 任丘市| 晴隆县| 正定县| 麻江县| 西藏| 天峻县| 辽宁省| 健康| 越西县| 玉山县| 浏阳市| 紫云| 江安县| 张家港市| 广河县| 仪征市| 栖霞市| 崇礼县| 永德县| 思南县| 彰化县|