首頁 > 軟體

grep正規表示式匹配中括號的方法範例

2022-09-20 22:02:37

1. 匹配中括號,例如匹配 String[] args

$ echo "String[] args" | grep -Eo "[][0-9a-zA-Z ]+"
String[] args		(這一行是匹配到的結果)

(1)grep -E 加上 -E 表示採用正規表示式進行匹配。加 -o 引數,表示只輸出匹配到的部分。

(2)正規表示式中,表示 Character class (字元組)的中括號:即下面例子中最外層的中括號,例如 [0-9]+ 匹配一個或多個 0 到 9 的數位,[0-9a-z]+ 匹配一個或多個 0 到 9、小 a 到 小 z 的字元。

(3)在字元組中使用中括號,也就是說在中括號裡還有中括號。 匹配中括號 [ ]時,需要把中括號放到字元組的最前面,且] 在前,[在後。(如下面例子中的 [][0-9a-zA-Z ]+

echo "String[] args" | grep -E "[[]0-9a-zA-Z ]+" 這樣是不匹配 String[] args 的。

[ 可以匹配到左中括號,例如,這種形式 [0-9a-zA-Z []+ 可以匹配到左中括號,無法匹配右中括號:

$ echo "String[] args" | grep -Eo "[0-9a-zA-Z []+"
String[		(這一行是匹配到的結果)
 args		(這一行是匹配到的結果)

說明:加 -o 引數,表示只輸出匹配到的部分。可以看到只匹配到了 String[,沒有右中括號。

其他情況的輸出結果:

$ echo "String[] args" | grep -Eo "[0-9a-zA-Z []]+"
[]		(這一行是匹配到的結果)

說明:這個正規表示式 [0-9a-zA-Z [[]]+ 實際被解釋為 [0-9a-zA-Z [[]]+ 了。[0-9a-zA-Z [[] 匹配左中括號,接著是 ]+ 匹配右中括號。

$ echo "String[] args" | grep -Eo "[]0-9a-zA-Z []+"String[] args(這一行是匹配到的結果)$ echo "String[] args" | grep -Eo "[]0-9a-zA-Z []+"
String[] args		(這一行是匹配到的結果)

說明:[]0-9a-zA-Z []+ 是可以匹配 String[] args 的,需要把 ] 放到最前面。[ 放到後面也可以。

注意:一定要加 -o 引數。

2. 匹配大括號,例如匹配 {abc 123}

大括號 { } 在中括號中沒有順序關係。也不用必須放在中括號的最前面。

這幾種形式都可以: [}{0-9a-zA-Z ]+[{}0-9a-zA-Z ]+[0-9a-zA-Z {}]+[0-9a-zA-Z }{]+

$ echo "{abc 123}" | grep -Eo "[}{0-9a-zA-Z ]+"
{abc 123}		(這一行是匹配的結果)

$ echo "{abc 123}" | grep -Eo "[{}0-9a-zA-Z ]+"
{abc 123}		(這一行是匹配的結果)

3. 同時匹配中括號和大括號,例如匹配 new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}

[][}{0-9a-zA-Z, ]+[][{}0-9a-zA-Z, ]+[]}{0-9a-zA-Z[, ]+[]}{0-9a-zA-Z, []+[]0-9a-zA-Z[, {}]+[]0-9a-zA-Z, {}[]+ 都可以。

中括號中的 ] 在前,[在後,即 ][

大括號 { }先後沒有關係。

$ echo "new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}" | grep -Eo "[][}{0-9a-zA-Z, ]+"
new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}		(這一行是匹配的結果)

$ echo "new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}" | grep -Eo "[][{}0-9a-zA-Z, ]+"
new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}		(這一行是匹配的結果)

$ echo "new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}" | grep -Eo "[]}{0-9a-zA-Z[, ]+"
new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}

4. 總結

(1)匹配字元組中的中括號時(中括號裡的中括號),] 需要在最前面,[ 的位置可以放在中間或者最後面。

(2)用 [ 或者 [[ 都可以匹配左中括號。

(3)匹配字元組中的大括號,此時大括號沒有特殊含義,所以 { }的位置可以隨意一些(但不要破壞其他區間)。

5. 參考

https://stackoverflow.com/questions/30044199/how-can-i-match-square-bracket-in-regex-with-grep

[…] If a bracket expression specifies both ‘-’ and ‘]’, the ‘]’ shall be placed first (after the ‘^’, if any) and the ‘-’ last within the bracket expression.
Therefore, your regex should be:
echo "fdsl[]" | grep -Eo "[][ a-z]+"

總結

到此這篇關於grep正規表示式匹配中括號的文章就介紹到這了,更多相關grep正則匹配中括號內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com