欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

linux正則表達(dá)式,反斜線(xiàn)加普通字符作為正則表達(dá)式詳解

 更新時(shí)間:2025年04月17日 09:17:42   作者:weifexie  
這篇文章主要介紹了linux正則表達(dá)式,反斜線(xiàn)加普通字符作為正則表達(dá)式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

提示:使用linux shell是tcsh。

正則表達(dá)式是在為用戶(hù)欲將處理的文本內(nèi)容設(shè)置了樣式,然后Linux程序、命令等會(huì)根據(jù)樣式來(lái)匹配文字。不再贅述該概念。

一、反斜線(xiàn) \ 加普通字符作為正則表達(dá)式

首先,反斜線(xiàn)\是普通正則表達(dá)式,自然也就不需要使用擴(kuò)展項(xiàng)去告知Linux程序、命令等將要匹配的樣式指定為擴(kuò)展正則表達(dá)式,省去了很多不必要的麻煩,執(zhí)行速度也會(huì)更快,有些Linux命令為了執(zhí)行速度更快,將樣式默認(rèn)為普通正則表達(dá)式。

下列出了反斜線(xiàn)加上普通字符用作正則表達(dá)式的情況。

定義模式所包括的字符注釋
\d[0-9]單個(gè)數(shù)字,來(lái)自digit
\D[a-zA-Z]單個(gè)非數(shù)字字符
\w[a-zA-Z0-9_]單個(gè)字母數(shù)字下劃線(xiàn),來(lái)自word
\W單個(gè)非數(shù)字字母下劃線(xiàn)的字符匹配符號(hào),如逗號(hào),、空格、短線(xiàn)- 等
\s[:space:]、\n、\t單個(gè)空格、換行符、或制表符,來(lái)自space
\S除空格、換行符、制表符的任意字符如[0-9a-zA-Z_]、下劃線(xiàn)_、短線(xiàn)- 等
\b單詞邊界
\B非單詞邊界
\t制表符一個(gè)大距離的間隔,和4個(gè)連續(xù)的空格類(lèi)似
\n換行符光標(biāo)調(diào)到下一行位置
\r回車(chē)光標(biāo)回到起始位置
\v垂直制表符
\f換頁(yè)符

注意:

  1. 反斜線(xiàn)加上普通字符用作正則表達(dá)式時(shí),需要一些選項(xiàng)來(lái)說(shuō)明;如grep使用時(shí),雖不需要加選項(xiàng) -E,但需要加上選項(xiàng) -P。實(shí)際上 -P也是表示后面樣式為某種擴(kuò)展正則表達(dá)式。其次,也并不是所用的反斜線(xiàn)加上普通字符用作正則表達(dá)式在被grep使用時(shí)都需要加上 -P選項(xiàng)。
  2. \w\W是互補(bǔ)的,\d\D是互補(bǔ)的,\s\S是互補(bǔ)的。
  3. 表中從\b開(kāi)始,定義模式就不是很常用了,但是在某些場(chǎng)合使用這些表達(dá)式可能有奇效。

二、使用方法和案例

在Linux自建命令中,三劍客算是最常使用正則表達(dá)式的命令了,下面使用grep、sed、和gawk命令來(lái)說(shuō)明其用法。

1 、grep

所需文本如下

# 文本示例
/home/weifexie/home/try [204]: ls usb4_sc0_t_0.v 
usb4_sc0_t_0.v

/home/weifexie/home/try [206]: cat usb4_sc0_t_0.v
//module usb4_sc0_t_0 ( USB4_Router_ID_IN , USB4RT_0_DbgBlkId , 
module usb4_sc0_t ( USB4_Router_ID_IN , USB4RT_0_DbgBlkId , 
input  [3:0] USB4_Router_ID_IN ;
input  [7:0] USB4RT_0_DbgBlkId ;
sdx_cio0_t_0 sdx_cio0_t ( .USB4_Router_ID_IN ( USB4_Router_ID_IN ) , 
    .USB4RT_0_DbgBlkId ( USB4RT_0_DbgBlkId ) , 
# end

grep示例 反斜線(xiàn)加上普通字符用作普通正則表達(dá)式,grep命令不需要加選項(xiàng)

# \b、\w、\W、\s、\S的用法,不需要grep加上選項(xiàng),正則表達(dá)式是被看作是普通的正則表達(dá)式使用
# 注釋?zhuān)篭b是modul的左邊錨定,\w可是匹配字母e,\W匹配空格,\s匹配空格,\S可以匹配字母和下劃線(xiàn)
/home/weifexie/home/try [265]: grep '//*\bmodul\w*\W[a-z0-9_]*_[0-9]\s(\s\S\S\S[0-9]\S' usb4_sc0_t_0.v
//module usb4_sc0_t_0 ( USB4_Router_ID_IN , USB4RT_0_DbgBlkId , 
---分隔

# 注釋?zhuān)篭b是modul的右邊錨定,原文為module,故匹配為空
/home/weifexie/home/try [268]: grep '//*\bmodul\b\w*\W[a-z0-9_]*_[0-9]\s(\s\S\S\S[0-9]\S' usb4_sc0_t_0.v
---分隔

# 注釋?zhuān)篭B是modul的右邊錨定,表示modul右邊未結(jié)束,
/home/weifexie/home/try [269]: grep '//*\bmodul\B\w*\W[a-z0-9_]*_[0-9]\s(\s\S\S\S[0-9]\S' usb4_sc0_t_0.v
//module usb4_sc0_t_0 ( USB4_Router_ID_IN , USB4RT_0_DbgBlkId , 

匹配樣式代碼和執(zhí)行結(jié)果,帶顏色

grep示例 反斜線(xiàn)加上普通字符用作擴(kuò)展正則表達(dá)式,grep需要加選項(xiàng) -P

# 注釋?zhuān)篭d匹配數(shù)字,但是grep沒(méi)有使用 -P選項(xiàng),故匹配不成功
/home/weifexie/home/try [272]: grep '//*\bmodul\B\w*\W[a-z0-9_]*_[0-9]\s(\s\S\S\S\d\S' usb4_sc0_t_0.v
---分隔符

# 注釋?zhuān)篭d匹配數(shù)字,grep使用 -P選項(xiàng),grep命令出錯(cuò),顯示左小括號(hào)(需要一個(gè)右小括號(hào)組成一個(gè)小括號(hào)用作分組匹配,分組匹配是擴(kuò)展表達(dá)式的內(nèi)容,
#-P選項(xiàng)是將樣式認(rèn)定為擴(kuò)展表達(dá)式,出錯(cuò)的原因是因?yàn)橄到y(tǒng)覺(jué)得少了右小括號(hào),若只保留左小括號(hào)作為普通符號(hào)使用的話(huà),需要使用轉(zhuǎn)義符
/home/weifexie/home/try [273]: grep -P '//*\bmodul\B\w*\W[a-z0-9_]*_[0-9]\s(\s\S\S\S\d\S' usb4_sc0_t_0.v
grep: missing )
---分隔符

# 使用轉(zhuǎn)義符轉(zhuǎn)義左小括號(hào),\d匹配數(shù)字4
/home/weifexie/home/try [274]: grep -P '//*\bmodul\B\w*\W[a-z0-9_]*_[0-9]\s\(\s\S\S\S\d\S' usb4_sc0_t_0.v
//module usb4_sc0_t_0 ( USB4_Router_ID_IN , USB4RT_0_DbgBlkId ,

匹配樣式代碼和執(zhí)行結(jié)果,帶顏色

將會(huì):會(huì)使用另一文詳細(xì)的介紹grep命令的選項(xiàng)和用法

2、sed

所需文本同上

sed示例 反斜線(xiàn)加上普通字符用作普通正則表達(dá)式,sed不需要選項(xiàng)

# 文本同上
/home/weifexie/home/try [350]: cat usb4_sc0_t_0.v
//module usb4_sc0_t_0 ( USB4_Router_ID_IN , USB4RT_0_DbgBlkId , 
module usb4_sc0_t ( USB4_Router_ID_IN , USB4RT_0_DbgBlkId , 
input  [3:0] USB4_Router_ID_IN ;
input  [7:0] USB4RT_0_DbgBlkId ;
sdx_cio0_t_0 sdx_cio0_t ( .USB4_Router_ID_IN ( USB4_Router_ID_IN ) , 
    .USB4RT_0_DbgBlkId ( USB4RT_0_DbgBlkId ) , 
---

# 注釋?zhuān)?n 作用是sed執(zhí)行的部分才會(huì)顯示,p表示打印,\b和\B同上,\w匹配字母e,\w匹配下劃線(xiàn),\s匹配空格,\S匹配下劃線(xiàn),\W匹配逗號(hào)
/home/weifexie/home/try [351]: sed -n '/\bmodul\B\w\s[a-z0-9]*\wsc[0-9]_t\b\s( USB[0-9]\w[a-zA-Z]*_[A-Z]*\S[A-Z]*\s\W/p' usb4_sc0_t_0.v
module usb4_sc0_t ( USB4_Router_ID_IN , USB4RT_0_DbgBlkId , 
---

# s///g表示將匹配上的文本替換成指定的文本,下命令意思是將上命令匹配到的文本用iloveu進(jìn)行替換,即
# “module usb4_sc0_t ( USB4_Router_ID_IN ,”被文本“iloveu”替換
/home/weifexie/home/try [352]: sed -n 's/\bmodul\B\w\s[a-z0-9]*\wsc[0-9]_t\b\s( USB[0-9]\w[a-zA-Z]*_[A-Z]*\S[A-Z]*\s\W/iloveu/gp' usb4_sc0_t_0.v
iloveu USB4RT_0_DbgBlkId ,

sed示例 反斜線(xiàn)加上普通字符用作擴(kuò)展正則表達(dá)式,sed命令需要加選項(xiàng) -r

# \D即使sed 加上-r也無(wú)法使用,\d即使sed 加上-r也無(wú)法使用,沒(méi)有文本能和\D和\d匹配,說(shuō)明sed -r 不支持
/home/weifexie/home/try [378]: sed -n -r '/\bmodul\B\w\s[a-z0-9]*\wsc[0-9]_t\b\s\( US\D[0-9]\w[a-zA-Z]*_[A-Z]*\S[A-Z]*\s\W/p' usb4_sc0_t_0.v
---

/home/weifexie/home/try [379]: sed -n -r '/\bmodul\B\w\s[a-z0-9]*\wsc[0-9]_t\b\s\( USB\d\w[a-zA-Z]*_[A-Z]*\S[A-Z]*\s\W/p' usb4_sc0_t_0.v
---

# sed -r 支持?jǐn)U展表達(dá)式分組符號(hào)
/home/weifexie/home/try [380]: sed -n -r '/\bmodul\B\w\s[a-z0-9]*\wsc[0-9]_t\b\s\( USB[0-9]\w[a-zA-Z]*_[A-Z]*\S[A-Z]*\s\W/p' usb4_sc0_t_0.v
module usb4_sc0_t ( USB4_Router_ID_IN , USB4RT_0_DbgBlkId , 
/home/weifexie/home/try [381]: sed -n -r 's/\bmodul\B\w\s[a-z0-9]*\wsc[0-9]_t\b\s\( USB[0-9]\w[a-zA-Z]*_[A-Z]*\S[A-Z]*\s\W/iloveu/pg' usb4_sc0_t_0.v
iloveu USB4RT_0_DbgBlkId ,

sed -r支持?jǐn)U展表達(dá)式。

將會(huì):會(huì)使用另一文詳細(xì)的介紹sed命令的選項(xiàng)和用法

3、gawk

提示:gawk和awk區(qū)別筆友有很多介紹,這里不做介紹,一言以蔽之,gawk是GNU下的功能更強(qiáng)大的awk版本。

所用文本如下

/home/weifexie/shell_tra [402]: cat phonelist 
(010)0751-075
(010) 0751-075
010-0751-075
010.0751.075
(021)0751-075
(021) 0751-075
021-0751-075
021.0751.075
(0751)0751-075
(0751) 0751-075
0751-0751-075
0751.0751.075

[751.0751.075
0751.751.075
0751.0751.-75

gawk命令支持普通的正則表達(dá)式

gawk命令加上 -r 支持?jǐn)U展正則表達(dá)式,但不支持\d和\D

代碼執(zhí)行如下:

# 下gawk的功能是將匹配/^\(?((010)|(02[0-9])|([0-9]{4}))\)?(| |-|\.)[0-9]{4}(\S|\.)[0-9]{3}$/樣式的phonelist文本行打印出來(lái)
/home/weifexie/shell_tra [410]: cat phonelist | gawk -r '/^\(?((010)|(02[0-9])|([0-9]{4}))\)?(| |-|\.)[0-9]{4}(-|\.)[0-9]{3}$/ {print $0}'
(010)0751-075
(010) 0751-075
010-0751-075
010.0751.075
(021)0751-075
(021) 0751-075
021-0751-075
021.0751.075
(0751)0751-075
(0751) 0751-075
0751-0751-075
0751.0751.075
---分隔符

# \w匹配0,\s匹配空格,\W匹配短線(xiàn)-,\S匹配短線(xiàn)-
/home/weifexie/shell_tra [411]: cat phonelist | gawk -r '/^\(?((\w10)|(02[0-9])|([0-9]{4}))\)?(|\s|\W|\.)[0-9]{4}(\S|\.)[0-9]{3}$/ {print $0}'
(010)0751-075
(010) 0751-075
010-0751-075
010.0751.075
(021)0751-075
(021) 0751-075
021-0751-075
021.0751.075
(0751)0751-075
(0751) 0751-075
0751-0751-075
0751.0751.075
---分隔符
# gawk -r 使用/^\d/樣式?jīng)]有匹配到文本,\d和\D不被支持
/home/weifexie/shell_tra [412]: cat phonelist | gawk -r '/^\(?((\w10)|(02[0-9])|([0-9]{4}))\)?(|\s|\W|\.)[0-9]{4}(\S|\.)[0-9]{3}$/ {print $0}' | gawk -r '/^\d/ {print $0}'
---分隔符

# gawk -r 支持使用/^[0-9]/樣式
/home/weifexie/shell_tra [413]: cat phonelist | gawk -r '/^\(?((\w10)|(02[0-9])|([0-9]{4}))\)?(|\s|\W|\.)[0-9]{4}(\S|\.)[0-9]{3}$/ {print $0}' | gawk -r '/^[0-9]/ {print $0}'
010-0751-075
010.0751.075
021-0751-075
021.0751.075
0751-0751-075
0751.0751.075

不常用的正則表達(dá)式

用一段代碼對(duì)這些表達(dá)式有一個(gè)直觀的認(rèn)識(shí),有印象即可,用時(shí)候查詢(xún)。

/home/weifexie/home/try [231]: echo "1\v1"
1
 1
/home/weifexie/home/try [232]: echo "1\n1"
1
1
/home/weifexie/home/try [233]: echo "1\f1"
1
 1
/home/weifexie/home/try [234]: echo "1\r1"
1
/home/weifexie/home/try [235]: echo "1\t1"
1	1

注釋1:\r 右邊的1和左邊的1重復(fù)了,故看似只是echo了一次。\r指的是鼠標(biāo)光標(biāo)移到起始位置,echo -n 表示將該行行尾的換行符去掉。

注釋2:\v和\f顯示的結(jié)果很類(lèi)似,二者之間的差異,==可能之后還會(huì)補(bǔ)充==

總結(jié)

linux正則表達(dá)式,有普通的正則表達(dá)式和擴(kuò)展正則表達(dá)式,再加上反斜線(xiàn)加普通字符作為正則表達(dá)式這一用法,掌握后即可進(jìn)行下一部分學(xué)習(xí)了。

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

相關(guān)文章

  • 關(guān)于Windows 不能在 本地計(jì)算器 啟動(dòng) Apache2(phpstudy)

    關(guān)于Windows 不能在 本地計(jì)算器 啟動(dòng) Apache2(phpstudy)

    今天在自己的本子上準(zhǔn)備放多個(gè)虛擬站點(diǎn)。用的是#phpstudy#。在軟件自身的站點(diǎn)設(shè)置中,根據(jù)提示添加的多站點(diǎn)無(wú)效不知道是否和我的系統(tǒng)是Win7有關(guān)
    2012-09-09
  • 詳解Centos下YUM安裝PHP的兩種方式

    詳解Centos下YUM安裝PHP的兩種方式

    本篇文章主要介紹了Centos下YUM安裝PHP的兩種方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • CentOS平臺(tái)快速搭建LAMP環(huán)境的方法

    CentOS平臺(tái)快速搭建LAMP環(huán)境的方法

    這篇文章主要介紹了CentOS平臺(tái)快速搭建LAMP環(huán)境的方法,結(jié)合實(shí)例形式分析了CentOS服務(wù)器上搭建LAMP環(huán)境的步驟、相關(guān)命令與操作注意事項(xiàng),需要的朋友可以參考下
    2019-05-05
  • Linux paste命令的使用方法

    Linux paste命令的使用方法

    這篇文章主要介紹了Linux paste命令的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • apache的rewrite規(guī)則使用說(shuō)明

    apache的rewrite規(guī)則使用說(shuō)明

    這篇文章主要介紹了apache的rewrite規(guī)則使用說(shuō)明,并帶有參考示例,需要的朋友可以參考下
    2014-04-04
  • centos配置mutt和msmtp實(shí)現(xiàn)郵件發(fā)送

    centos配置mutt和msmtp實(shí)現(xiàn)郵件發(fā)送

    這篇文章主要為大家詳細(xì)介紹了centos配置mutt和msmtp實(shí)現(xiàn)郵件發(fā)送,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Linux 下載安裝VSCode 使用編程輸出當(dāng)前時(shí)間的方法

    Linux 下載安裝VSCode 使用編程輸出當(dāng)前時(shí)間的方法

    這篇文章主要介紹了Linux 下載安裝VSCode 使用編程輸出當(dāng)前時(shí)間,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 分享Linux 系統(tǒng)生成隨機(jī)密碼的10種方法

    分享Linux 系統(tǒng)生成隨機(jī)密碼的10種方法

    利用Linux系統(tǒng)生成隨機(jī)密碼的10種方法 Linux操作系統(tǒng)的一大優(yōu)點(diǎn)是對(duì)于同樣一件事情,你可以使用高達(dá)數(shù)百種方法來(lái)實(shí)現(xiàn)它。例如,你可以通過(guò)數(shù)十種方法來(lái)生成隨機(jī)密碼。本文將介紹生成隨機(jī)密碼的十種方法,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • 配置apache默認(rèn)使用ssl的方法

    配置apache默認(rèn)使用ssl的方法

    首先確認(rèn)mod_rewrite已經(jīng)安裝,方法就是查看你的httpd.conf,搜索“LoadModule rewrite_module modules/mod_rewrite.so”,如果有,刪除前面的"#"。
    2009-10-10
  • -bash:/usr/bin/yum:沒(méi)有那個(gè)文件或目錄的解決方案

    -bash:/usr/bin/yum:沒(méi)有那個(gè)文件或目錄的解決方案

    在CentOS系統(tǒng)中,不慎刪除或卸載了yum可以通過(guò)重新安裝來(lái)恢復(fù),首先,確認(rèn)系統(tǒng)版本,例如CentOS,然后新建所需目錄以存放下載的文件,接下來(lái),分別從鏡像源下載yum組件和python依賴(lài)的rpm包,安裝python時(shí),如果遇到依賴(lài)問(wèn)題,可選擇強(qiáng)制安裝
    2024-10-10

最新評(píng)論