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

Linux通配符與正則表達(dá)式的區(qū)別及使用說明

 更新時(shí)間:2025年04月17日 09:38:44   作者:麥冬1897  
這篇文章主要介紹了Linux通配符與正則表達(dá)式的區(qū)別及使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

背景

在linux使用過程中,經(jīng)常需要查找文件,對(duì)命令中的通配符 pattern 和正則表達(dá)式的區(qū)分不是很清楚。有必要好好研究一下。

1 掃盲

通配符和正則表達(dá)式

當(dāng)在使用命令行時(shí),有很多時(shí)間都用來查找你所需要的文件,如 ls find 等。 Shell 提供了一套完整的字符串模式匹配規(guī)則,或者稱之為元字符,當(dāng) Shell 遇到上述字符時(shí),就會(huì)把它們當(dāng)作特殊字符,而不是文件名中的普通字符,這樣用戶就可以用它們來匹配相應(yīng)的文件名,我理解這可以稱為通配符。

通配符與正則表達(dá)式是有區(qū)別的,簡(jiǎn)單來說:通配符是用來通配的,正則表達(dá)式是用來匹配字符串的;

通配符是shell自帶的用于匹配文件名的工具,多用在文件名上,比如查找findls,cp 等等,而正則表達(dá)式則需要特定命令的支持才可以使用,如:grep、sedawk(號(hào)稱Linux三劍客)、vi/vim、perl等,這些都是處理文本的工具。

其次,shell對(duì)通配符與正則表達(dá)式的處理也有不同,“ ”內(nèi)一般為通配符(是shell本身提取處理),‘ ’內(nèi)一般為正則表達(dá)式(shell會(huì)將其中的數(shù)據(jù)傳遞給其它命令處理)。

通配符

常見元字符:

  • *:匹配零或多個(gè)任意字符
  • ?:匹配任意單個(gè)字符
  • []:指定中括號(hào)內(nèi)的多個(gè)字符,如:[rwc]或[r,w,c]都行
  • [^][!]:除了中括號(hào)內(nèi)字符外匹配任一個(gè)字符

引用以下模式要在外面再套一個(gè)[],tr命令則不用(這是規(guī)定嗎?)

  • [:digit:]:匹配任意一個(gè)數(shù)字
  • [:lower:]:任意小寫字符
  • [:upper:]:任意大寫字符
  • [:alpha:]:任意大小寫字母
  • [:alnum:]:任意一個(gè)字母或數(shù)字
  • [:space:]:一個(gè)空格
  • [:punct:]:標(biāo)點(diǎn)符號(hào)

正則表達(dá)式

這里不具體介紹正則表達(dá)式,只是說一下和通配符的區(qū)別

首先通配符沒有次數(shù)匹配

  • *:匹配前面的字符零次或多次 
  • .:匹配任意一個(gè)字符
  • ?:前面的字符零次或一次,基本正則是?
  • +:前面的字符至少一次,基本正則是+
  • []:和通配符完全一樣
  • [^]:和通配符一樣,但是沒有[!]的寫法

2 通配符詳細(xì)介紹

測(cè)試數(shù)據(jù)

touch a a6.log abc.log ac.txt b c c5.txt x.log A

* 代表任意多個(gè)字符

  • 例:查詢以 .log 結(jié)尾的文件 ll *.log

? 代表任意單個(gè)字符

  • 例:只查詢 a、b、c ll ?

[] 代表 [] 之間的某一個(gè)字符,比如[0-9]可以代表0-9之間的任意一個(gè)數(shù)字,[a-zA-Z]可以代表a-zA-Z之間的任意一個(gè)字母,字母區(qū)分大小寫。

  • 例:只查詢字母文件 ll [a-zA-Z]
  • 例:查詢以 .log 結(jié)尾且 .log 前只有兩個(gè)字符的文件且第二個(gè)字符是數(shù)字 ll ?[0-9].log

^ 表示匹配結(jié)果取反的意思,注意這個(gè)通配符必須要在[]中使用

  • 例:查詢不是以 .txt 結(jié)尾的文件 ll *[^txt]*

{} 表示符合括號(hào)內(nèi)包含的多個(gè)文件

  • 例:查詢.log.txt 結(jié)尾的文件 ll {*.log,*.txt}

注意: .這個(gè)符合比較特殊,如果匹配的條件加上了該符合那么說明查詢結(jié)果文件就包含帶.的文件

例如前面的^的例子,如果我這樣查詢ll *.[^txt]*,那么結(jié)果就不一樣了

刪除操作

  • 例如:刪除a、b、c和以.txt結(jié)尾的文件 
rm -f {[abc],*.txt}

當(dāng)然既然可以查詢當(dāng)然也可以使用通配符匹配的方式進(jìn)行移動(dòng)文件,如果需要在存在很多文件的文件夾中移動(dòng)某些類型的文件那么使用通配符匹配的效率就顯而易見了;當(dāng)時(shí)通配符的使用技巧不單單只有這些,有空的可以多去研究。

3 實(shí)例

  • * 匹配文件名中的任何字符串,包括空字符串。
  • ? 匹配文件名中的任何單個(gè)字符。
  • [...] 匹配[ ]中所包含的任何字符。
  • [!...] 匹配[ ]中非感嘆號(hào)!之后的字符。和^的效果一樣

如:

  • 5* 5開頭的所有字符串
  • *5 5結(jié)尾的所有字符串
  • *5? 以5為倒數(shù)第二個(gè)字符的字符串
  • [0-9] 所有以數(shù)字的字符
  • [1,2] 1或者2
  • [!0-9] 不是數(shù)字的字符
  • ls /etc/[!a-n]*.conf 列出/etc/目錄中不是以字母a到n開頭的,并且以.conf結(jié)尾的文件
  • ls /etc/[a-n]*.conf 列出/etc/目錄中以字母a到n開頭的,并且以.conf結(jié)尾的文件
  • ls /bin/[ck]* 列出以 c或k開頭的文件名

4 正則表達(dá)式詳細(xì)介紹

正則表達(dá)式(也稱為“regex”或“regexp”)是一種用來描述文本模式的特殊語法。

在 Linux 系統(tǒng)上,正則表達(dá)式通常被用來查找文本的模式,以及對(duì)文本流執(zhí)行“搜索-替換”操作以及其它功能。

簡(jiǎn)單字串

$ grep bash /etc/passwd        
operator:x:11:0:operator:/root:/bin/bash        
root:x:0:0::/root:/bin/bash        
ftp:x:40:1::/home/ftp:/bin/bash 

在上面的命令中,grep 的第一個(gè)參數(shù)是一個(gè)正則表達(dá)式;第二個(gè)參數(shù)是一個(gè)文件名。grep 讀取 /etc/passwd 中的每一行并對(duì)它應(yīng)用簡(jiǎn)單子串正則表達(dá)式 bash 來查找匹配項(xiàng)。如果找到一個(gè)匹配項(xiàng),那么 grep 打印出整行;否則,忽略該行。

理解簡(jiǎn)單子串

一般來說,如果您正在搜索一個(gè)子串,那么您可以不提供任何“特殊”字符,而只是逐字地指定文本。只有在子串包含 +、.、*、[]/(在這樣的情況下,這些字符需要用引號(hào)括起來并在它們的前面使用反斜杠)才需要做特殊的事情。

下面是簡(jiǎn)單子串正則表達(dá)式幾個(gè)其它示例:

  tmp (掃描查找文字串 tmp)        
“\[box\]”(掃描查找文字串 [box])        
“\*funny\*”(掃描查找文字串 *funny*)        
“l(fā)d\.so”(掃描查找文字串 ld.so)

元字符

使用正則表達(dá)式,可以利用元字符來執(zhí)行比我們至今已研究過的示例復(fù)雜得多的搜索。這些元字符中的一個(gè)是 .(點(diǎn)),它與任何單個(gè)字符匹配:

$ grep dev.hda /etc/fstab        
/dev/hda3 reiserfs noatime,ro 1 1        
/dev/hda1 /boot reiserfs noauto,noatime,notail 1 2        
/dev/hda2 swap sw 0 0        
#/dev/hda4 /mnt/extra reiserfs noatime,rw 1 1        

在本示例中,文字文本 dev.hda 沒有出現(xiàn)在 /etc/fstab 中的任何一行中。但是,grep 掃描這些行時(shí)沒有查找文字 dev.hda 字符串,而是查找 dev.hda 模式。請(qǐng)記住 . 將與任何單個(gè)字符相匹配。正如您看到的,. 元字符在功能上等價(jià)于 glob 擴(kuò)展中 ? 元字符的工作原理。

使用 []

如果我們希望與比 . 更具體一點(diǎn)地來匹配字符,那么我們可以使用 [ 和 ](方括號(hào))來指定要匹配的字符子集:

$ grep dev.hda[12] /etc/fstab        
/dev/hda1 /boot reiserfs noauto,noatime,notail 1 2        
/dev/hda2 swap swap sw 0 0  

[\u4e00-\u9fa5] : 表示任意一個(gè)漢字

正如您看到的,這個(gè)特殊語法的作用與glob文件名擴(kuò)展中的 [] 相同。

使用 [^]

通過使 [ 后面緊跟一個(gè) ^,您可以使方括號(hào)中的意思相反。在本例中,方括號(hào)將與未列在方括號(hào)內(nèi)的任意字符匹配。同樣,請(qǐng)注意我們?cè)谡齽t表達(dá)式中使用 [^] ,而在 glob 中使用 [!] :

$ grep dev.hda[^12] /etc/fstab        
/dev/hda3 reiserfs noatime,ro 1 1        
/dev/hda4 /mnt/extra reiserfs noatime,rw 1 1   

區(qū)別語法

注意下面一點(diǎn)很重要:方括號(hào)內(nèi)部的語法根本不同于正則表達(dá)式其它部分中的語法。

例如,如果在方括號(hào)內(nèi)放置一個(gè) . ,那么它允許方括號(hào)與文字 . 匹配,就象上面示例中的 1 和 2。比較起來,除非有\(zhòng) 作為前綴,否則方括號(hào)外面的文字 . 被解釋為一個(gè)元字符。通過輸入如下命令,我們可以利用這一事實(shí)來打印 /etc/fstab 中包含文字串 dev.hda 的所有行的列表:

$ grep dev[.]hda /etc/fstab

或者,我們也可以輸入:

$ grep "dev\.hda" /etc/fstab

這兩個(gè)正則表達(dá)式都不可能與您的 /etc/fstab 文件中的任何行相匹配。

*元字符

某些元字符本身不匹配任何字符,但卻修改前一個(gè)字符的含義。一個(gè)這樣的元字符是 * (星號(hào)),它用來與前一個(gè)字符的零次或者多次重復(fù)出現(xiàn)相匹配。

這里是一些示例:

  • ab*c(與 abbbbc 匹配但不與 abqc 匹配)
  • ab*c(與 abc 匹配但不與 abbqbbc 匹配)
  • ab*c(與 ac 匹配但不與 cba 匹配)
  • b[cq]*e(與 bqe 匹配但不與 eb 匹配)
  • b[cq]*e(與 bccqqe 匹配但不與 bccc 匹配)
  • b[cq]*e(與 bqqcce 匹配但不與 cqe 匹配)
  • b[cq]*e(與 bbbeee 匹配)
  • .*(與任何字符串匹配)
  • foo.*(與以 foo 開始的任何字符串相匹配)
  • ac 行與正則表達(dá)式 ab*c 相匹配,因?yàn)樾翘?hào)也允許前面的表達(dá)式 b 出現(xiàn)零次。請(qǐng)注意解釋 * 正則表達(dá)式元字符所用的方法與解釋 * glob 字符的方法根本不同。

行的開始和結(jié)束

我們?cè)谶@里要詳細(xì)描述的最后幾個(gè)元字符是 ^$ 元字符,它們用來分別與行的開始和結(jié)束相匹配。通過在正則表達(dá)式開始處使用一個(gè) ^ ,您可以將您的模式“錨定”在行的開始。

在下面的示例中,我們使用 ^# 正則表達(dá)式來與以 # 字符開始的任何行相匹配:

$ grep ^# /etc/fstab        
# /etc/fstab: static file system information.        
#

完整行正則表達(dá)式

可以組合 ^$ 來與完整的行相匹配。

例如,下面的正則表達(dá)式將與以 # 字符開始并以. 字符結(jié)束的行相匹配,在其中間可以有任意多個(gè)其它字符:

$ grep '^#.*/.$' /etc/fstab        
# /etc/fstab: static file system information.  

在上面的示例中,我們用單引號(hào)將我們的正則表達(dá)式括起來以阻止 shell 解釋 $

在不使用單引號(hào)的情況下,grep 甚至沒有機(jī)會(huì)查看 $$ 就從我們的正則表達(dá)式上消失了。

正則總結(jié)

元字符

  • . :小數(shù)點(diǎn)可以匹配除\n以外的任意一個(gè)字符。如果要匹配包括\n在內(nèi)的所有字符,一般用[\s\S],或者是用.(?s)匹配模式來實(shí)現(xiàn)。 
  • [abc] :匹配方括號(hào)中的任意一個(gè)字符。可以使用-表示字符范圍,如[a-z0-9]匹配小寫字母和阿拉伯?dāng)?shù)字。 
  • [^abc] :在方括號(hào)內(nèi)開頭使用 ^ 符號(hào),表示匹配除方括號(hào)中字符之外的任意字符。 | : 表示或 
  • \d 匹配阿拉伯?dāng)?shù)字,等同于[0-9]。 
  • \D 匹配阿拉伯?dāng)?shù)字之外的任意字符,等同于[^0-9]。 
  • \x 匹配十六進(jìn)制數(shù)字,等同于[0-9A-Fa-f]。 
  • \X 匹配十六進(jìn)制數(shù)字,等同于[^0-9A-Fa-f]。 
  • \w 匹配單詞字母,等同于[0-9A-Za-z_]。 
  • \W 匹配單詞字母之外的任意字符,等同于[^0-9A-Za-z_]。 
  • \t 匹配<TAB>字符。 
  • \s 匹配空白字符,等同于[ /t]。 
  • \S 匹配非空白字符,等同于[^ /t]。 
  • \a 所有的字母字符. 等同于[a-zA-Z] 
  • \l 小寫字母 [a-z] 
  • \L 非小寫字母 [^a-z] 
  • \u 大寫字母 [A-Z] 
  • \U 非大寫字母 [^A-Z]

表示數(shù)量的元字符

元字符 說明

  • * 匹配 0-任意個(gè) 
  • \+ 匹配 1-任意個(gè) 
  • \? 匹配 0-1個(gè) 
  • \{n,m\} 匹配 n-m個(gè) 
  • \{n\} 匹配 n個(gè) 
  • \{n,\} 匹配 n-任意個(gè) 
  • \{,m\} 匹配 0-m個(gè)

換行符 說明

  • \r,\n 回車和換行
  • \\ 匹配\ 
  • \^,\$,\. 匹配^ $ .

以下字符在匹配其本身時(shí),通常需要進(jìn)行轉(zhuǎn)義。

在實(shí)際應(yīng)用中,根據(jù)具體情況,需要轉(zhuǎn)義的字符可能不止如下所列字符 : $ ^ { [ ( | ) * + ? \

表示位置的符號(hào)

  • $ 匹配行尾 
  • ^ 匹配行首 
  • \< 匹配單詞詞首 
  • \> 匹配單詞詞尾 
  • \b 匹配單詞邊界

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux文件系統(tǒng)之inode與軟硬鏈接詳解

    Linux文件系統(tǒng)之inode與軟硬鏈接詳解

    這篇文章討論的話題是沒有被打開的文件,文件等于文件內(nèi)容加文件屬性,沒打開的文件一定是存儲(chǔ)在磁盤上的,文件內(nèi)容以數(shù)據(jù)塊的形式進(jìn)行存儲(chǔ),文件屬性以 inode 的形式進(jìn)行存儲(chǔ),文中通過圖文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Linux查看History記錄加時(shí)間戳的小技巧

    Linux查看History記錄加時(shí)間戳的小技巧

    今天小編就為大家分享一篇關(guān)于Linux查看History記錄加時(shí)間戳的小技巧,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 淺談find命令下的atime,ctime,mtime

    淺談find命令下的atime,ctime,mtime

    下面小編就為大家?guī)硪黄獪\談find命令下的atime,ctime,mtime。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Linux系統(tǒng)日志持久化配置的完整指南

    Linux系統(tǒng)日志持久化配置的完整指南

    本文詳細(xì)介紹了Linux 9中系統(tǒng)日志的持久化配置方法,包括配置文件的修改、日志文件的結(jié)構(gòu)和管理、啟動(dòng)日志的查看以及高級(jí)配置選項(xiàng),通過這些步驟,用戶可以確保系統(tǒng)日志在重啟后仍然可用,從而提高故障排查和安全審計(jì)的能力,需要的朋友可以參考下
    2025-11-11
  • 詳解Linux用戶態(tài)與內(nèi)核態(tài)通信的幾種方式

    詳解Linux用戶態(tài)與內(nèi)核態(tài)通信的幾種方式

    這篇文章主要介紹了詳解Linux用戶態(tài)與內(nèi)核態(tài)通信的幾種方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • centos安裝php5、卸載php、安裝php7的教程

    centos安裝php5、卸載php、安裝php7的教程

    這篇文章主要介紹了centos安裝php5、卸載php、安裝php7 ,有著一定的參考價(jià)值,現(xiàn)在分享給大家,有需要的朋友可以參考一下
    2019-09-09
  • linux下AutoFs掛載服務(wù)安裝教程

    linux下AutoFs掛載服務(wù)安裝教程

    大家好,本篇文章主要講的是linux下AutoFs掛載服務(wù)安裝教程,感興趣的小伙伴趕快來看一看吧,對(duì)你有幫助的話記得收藏一下哦,方便下次瀏覽
    2021-12-12
  • 如何快速刪除Linux中的海量小文件的實(shí)現(xiàn)方案

    如何快速刪除Linux中的海量小文件的實(shí)現(xiàn)方案

    本文介紹了在Linux系統(tǒng)中刪除大量文件時(shí),傳統(tǒng)rm-rf*命令速度慢的問題,并提出了四種優(yōu)化方案:目錄替換法、使用rsync鏡像刪除、Perl語言系統(tǒng)調(diào)用和find配合-delete參數(shù),每種方案都有其適用場(chǎng)景和優(yōu)缺點(diǎn),需要的朋友可以參考下
    2026-01-01
  • apache負(fù)載均衡的安裝和實(shí)現(xiàn)方法

    apache負(fù)載均衡的安裝和實(shí)現(xiàn)方法

    在負(fù)載均衡技術(shù)中,硬件設(shè)備是比較昂貴的,對(duì)于負(fù)載均衡的學(xué)習(xí)者如果不是在企業(yè)中應(yīng)用或者是學(xué)員中學(xué)習(xí),很少有機(jī)會(huì)能碰到實(shí)際操作的訓(xùn)練。所以,很多朋友都會(huì)選擇軟件方面的設(shè)置進(jìn)行研究?,F(xiàn)在我們就來介紹一下再Apache下的Tomcat負(fù)載均衡的一些使用問題
    2012-10-10
  • 詳解centos7使用無線wifi連接的方法

    詳解centos7使用無線wifi連接的方法

    本篇文章主要介紹了centos7使用無線wifi連接的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2016-12-12

最新評(píng)論

泗阳县| 泽普县| 象山县| 万安县| 红安县| 西丰县| 柳州市| 即墨市| 霍林郭勒市| 文水县| 珲春市| 林州市| 前郭尔| 梅河口市| 固始县| 铜鼓县| 崇左市| 澳门| 玉田县| 临泽县| 湘西| 华池县| 冕宁县| 滦平县| 镇康县| 北碚区| 雷波县| 绥芬河市| 扎兰屯市| 长白| 荆州市| 长乐市| 股票| 舞阳县| 海丰县| 闵行区| 南京市| 灵宝市| 沙湾县| 周宁县| 梁河县|