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正则匹配中括号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!