linux中的正则表达式知识梳理
1. 正则表达式
1.1 正则表达式使用
正则表达式是开发者为了处理大量的字符串和文本而定义的一套规则和方法,使用正则表达式可以提高效率,快速获取想要的内容.
正则表达式常用于linux三剑客grep,sed,awk,用来处理文本数据,也适用于普通命令.
三剑客中使用正则表达式处理文本时,是以行为单位的.
1.2 基本的正则表达式及扩展的正则表达式
正则表达式及扩展的正则表达式及其含义,如下表:
| ######字符匹配(仅仅匹配单个字符) | |
| . | 匹配任意单个字符(通配符的 ? 代表单个字符) |
| [abc] | 匹配集合内任意单个字符 |
| [^abc] | 匹配集合外的任意单个字符(非,正则表达式不支持!,!会被当做一个字符) |
| .* | 匹配任意长度的任意字符,即匹配所有内容 |
| ######匹配次数(仅仅是次数,不是表示字符) | |
| *t |
匹配t前一个字符任意次(连续出现多少次的意思,前面的字符可以没有, 匹配0次,即空,则匹配了所有内容) |
| \?t | 匹配t前一个字符0次或1次(至多1次,前面的字符可有可无),反斜线是转义 |
| \+t | 匹配t前面的字符至少1次(1次或多次),反斜线是转义 |
| a\{m\}t | 匹配t前一个字符a,m次(具体的次数),反斜线是转义 |
| a\{m,n\}t | 匹配t前一个字符a至少m次,至多n次,反斜线是转义 |
| a\{0,n\}t | 匹配t前一个字符a至多n次,可以没有,0可以省略不写,反斜线是转义 |
| a\{1,n\}t | 匹配t前一个字符a至少1次,至多n次,反斜线是转义 |
| a\{m,\}t | 匹配t前一个字符a至少m次,多则不限制,反斜线是转义 |
| ######位置锚定 | |
| ^ | 行首锚定 |
| $ | 行尾锚定 |
| ^PATTERN$ | 模式匹配整行(具体的字符串匹配整行) |
| ^$ | 匹配 空行 |
| [[:space:]]*$ | 匹配多个以空白结尾(空白可以没有)的行 |
| \< 或 \b | 词首锚定(单词模式的左侧,单词可以是字符串或者数字,不能是特殊符号) |
| \> 或 \b | 词尾锚定(单词模式的右侧,单词可以是字符串或者数字,不能是特殊符号) |
| \<PATTERN>\ | 匹配整个单词 |
| ######分组及引用 | |
| \(\) |
将一个或者多个字符捆绑在一起,当做一个整体来处理,如\(xy\)*匹配前面 的xy任意次 |
| \(ab\+\(xy\)*\) | \1: ab+\(xy\)* |
| \2: xy | |
1.3 重复1.2
###基本的正则表达式:
^ #<===用法 ^keyword,匹配以keyword开头的行
$ #<===用法 keyword$,匹配以keyword结尾的行
^$ #<===匹配空行
. #<===表示任意单个字符
\ #<===转义字符,还原字符原本的意思
* #<===匹配前一个字符0次或多次(前一个字符0次时,匹配所有内容)
.* #<===匹配所有内容
^.* #<===匹配以任意多个字符开头的内容
.*$ #<===匹配以任意多个字符结尾的内容
[abc] #<===匹配集合内任意单个字符
[^abc] #<===匹配集合外的任意单个字符
###扩展的正则表达式(使用egrep无需加\转义):
\+ #<===匹配前一个字符1次或1次以上(至少1次)
\[:/\]+ #<===匹配[]内:/(或其他特殊符号)的字符1次或1次以上(至少1次)
\? #<===匹配前一个字符0次或1次
| #<===同时过滤多个字符串,使用到的分隔符(在通配符中表示管道)
\(\) #<===括号中的内容被当做一个整体,可以被后面的 \n 引用(n为数字)
\n #<===引用 () 中的内容(n为数字)
a\{m,n\} #<===匹配前一个子符a至少m次,至多n次
a\{n,\} #<===匹配前一个字符a至少n次,多则不限
a\{n\} #<===匹配前一个字符n次
a\{,m\} #<===匹配前一个字符至多m次,可以没有
浙公网安备 33010602011771号