第六章 Shell正規表示式

2021-09-22 05:27:41 字數 3259 閱讀 8263

正規表示式在每種語言中都會有,功能就是匹配符合你預期要求的字串。

shell正規表示式有兩種:

基礎正規表示式:bre(basic regular express)

擴充套件正規表示式:ere(extend regular express),擴充套件的表示式有+、?、|和()

下面是一些常用的正規表示式符號,我們先拿grep工具舉例說明。

符號

描述

示例

.匹配除換行符(\n)之外的任意單個字元

匹配123:

echo -e "123\n456" |grep -e '1.3' ^

匹配前面字串開頭

匹配以abc開頭的行:

echo -e "abc\nxyz" |grep -e ^abc $

匹配前面字串結尾

匹配以xyz結尾的行:

echo -e "abc\nxyz" |grep -e xyz$ *

匹配前乙個字元零個或多個

匹配x、xo和xoo:

echo -e "x\nxo\nxoo\no\noo" |grep "xo*"

x是必須的,批量了0零個或多個 +

匹配前面字元1個或多個

匹配abc和abcc:

echo -e "abc\nabcc\nadd" |grep -e 'ab+'

這樣是匹配單個數字:echo "113" |grep -e -o '[0-9]'

連續匹配多個數字:echo "113" |grep -e -o '[0-9]+' ?

匹配前面字元0個或1個

匹配ac或abc:

echo -e "ac\nabc\nadd" |grep -e 'a?c'

[ ]匹配中括號之中的任意乙個字元

匹配a或c:

echo -e "a\nb\nc" |grep -e '[ac]'

[ .-.]

匹配中括號中範圍內的任意乙個字元

匹配所有字母:

echo -e "a\nb\nc" |grep -e '[a-z]'

[^]匹配[^字元]之外的任意乙個字元

匹配a或b:

echo -e "a\nb\nc" |grep -e '[^c-z]'

匹配末尾數字:echo "abc:cde;123" |grep -e '[^;]+$' 或

匹配花括號前面字元至少n個字元

匹配abc字串(至少三個字元以上字串):

echo -e "a\nabc\nc" |grep -e '[a-z]' 

匹配花括號前面字元至少n個字元,最多m個字元

匹配12和123(不加邊界符會匹配單個字元):

echo -e "1\n12\n123\n1234" |grep -e -w -o '[0-9]'

\<

邊界符,匹配字串開始

匹配開始是123和1234:

echo -e "1\n12\n123\n1234" |grep -e -w '\<123'

\>

邊界符,匹配字串結束

匹配結束是1234:

echo -e "1\n12\n123\n1234" |grep -e '4\>'

( )單元或組合:將小括號裡面作為乙個組合

分組:匹配小括號中正規表示式或字元。\n反向引用,n是數字,從1開始編號,表示引用第n個分組匹配的內容

單元:匹配123a字串

echo "123abc" |grep -e -o '([0-9a-z])'

分組:匹配11

echo "113abc" |grep -e -o '(1)\1'

匹配出現xo出現零次或多次:

echo -e "x\nxo\nxoo\no\noo" |egrep "(xo)*" |

匹配豎槓兩邊的任意乙個

匹配12和123:

echo -e "1\n12\n123\n1234" |grep -e '12\>|123\>' \

轉義符,將特殊符號轉成原有意義

1.2,匹配1.2:1\.2,否則112也會匹配到

posix字元

描述

[:alnum:]

等效[a-za-z0-9]

[:alpha:]

等效[a-za-z]

[:lower:]

等效[a-z]

[:upper:]

等效[a-z]

[:digit:]

等效[0-9]

[:space:]

匹配任意空白字元,等效[\t\n\r\f\v]

[:graph:]

非空白字元

[:blank:]

空格與定位字元

[:cntrl:]

控制字元

[:print:]

可顯示的字元

[:punct:]

標點符號字元

[:xdigit:]

十六進製制

示例:echo -e "1\n12\n123\n1234a" |grep '[[:digit:]]'

qq群:shell/python運維開發群 323779636

在shell下使用這些正規表示式處理文字最多的命令有下面幾個工具:

命令

描述

grep

預設不支援擴充套件表示式,加-e選項開啟ere。如果不加-e使用花括號要加轉義符\

egrep

支援基礎和擴充套件表示式

awk支援egrep所有的正規表示式

sed預設不支援擴充套件表示式,加-r選項開啟ere。如果不加-r使用花括號要加轉義符\

支援的特殊字元

描述

\w匹配任意數字和字母,等效[a-za-z0-9_]

\w與\w相反,等效[^a-za-z0-9_]

\b匹配字串開始或結束,等效\《和\>

\s匹配任意的空白字元

\s匹配非空白字元

空白符

描述

\n換行符

\r回車符

\t水平製表符

\v垂直製表符

\0空值符

\b退後一格

下一章節具體講解grep、sed和awk用法,想要提公升三劍客功底的可以看看!

PHP第六章筆記 正規表示式

一 正規表示式的語法規則 描述了一類字串的特徵,然後通過這個特徵可以配合一些特定的函式,來完成對字串更加複雜的一系列操作 普通字元和特殊字元組成的乙個字串二 定界符 我們一般習慣使用正斜線 作為定界的字元,前後一致三 普通字元 四 元字元 d 匹配任意乙個十進位制數字,等價於 0 9 d 匹配任意乙...

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

shell 第六章 陣列應用

第六章 shell陣列應用 1.陣列基本概述 2.陣列基本使用 3.陣列遍歷與迴圈 01.什麼是陣列?陣列其實也算是變數,傳統的變數只能儲存乙個值,但陣列可以儲存多個值。02.陣列的分類 shell陣列分為普通陣列和關聯陣列。普通陣列 只能使用整數作為陣列索引。關聯陣列 可以使用字串作為陣列索引。0...