有关正则表达式容易混淆事项
- 本文讲的是Linux 系统中的正则表达式,即 Linux 正则表达式,应用正则表达式的命令就是
grep(egrep),sed,awk
,注意,其他普通命令正常情况下无法使用正则表达式。 - 正则表达式与前文讲解的通配符,特殊字符有本质区别,正则在Linux中是通过三剑客(
grep(egrep),sed,awk
)命令在文件或数据流中过滤内容的。而通配符是大部分普通命令都支持的,它主要用来检查文件或目录的
环境变量修改
配置后操作时不会出现异常匹配情况
vim /etc/profile
export LC_ALL=C
soucre /etc/profile
linux 正则表达式分类
基本正则表达式(BRE, basic regular expression)
- BRE对应的元字符有
^$.[]*
。
字符 | 作用 |
---|---|
^ | 尖角号,用法为^dalei,表示匹配以dalei 字符串开头的行 |
$ | 美元符,用法为dalei$,表示匹配以dalei 字符串结尾的行 |
^$ | 组合符,表示空行,逻辑解释就是以^结尾的行,或者以$开头的行 |
. | 点号,表示匹配任意一个且只有一个字符(但是不能匹配空行) |
\ | 转义字符,让有特殊含义的字符失去含义,变成普通符号字符,如\. 就只表示小数点 |
* | 重复匹配前一个字符(连续出现)0次或1次以上。注意:当重复0次的时候,表示啥也没有(空),即匹配所有内容 |
.* | 组合符,表示匹配所有 |
^.* | 组合符,匹配以任意多个字符开头的内容 |
.*S | 组合符,以任意多个字符结尾的内容 |
[abc] | 匹配[]集合内任意一个字符a或b或c;[abc] 也可写成[a-c] |
[^abc] | 匹配不包含^ 后的任意字符a或b或c,这里的^ 表示对[abc] 的取反,^ 不能使用!替代 |
- 中括号常用形式有:
- [a-z] 表示匹配所有单个小写字母
- [A-Z] 表示匹配所有单个大写字母
- [a-zA-Z] 表示匹配所有单个大小写字母
- [0-9]表示匹配所有单个数字
- [a-zA-Z0-9] 表示匹配所有字母数字
. 扩展正则表达式(ERE, extended regular expression)
- ERE在BRE基础上增加了
(){}?+|
等字符。- 扩展正则使用grep有个条件需要加
-E
参数或者使用egrep
字符 | 作用 |
---|---|
+ | 匹配前一个字符 1 次或多次 |
[:/]+ | 匹配括号内的:或/字符1次或多次 |
? | 匹配前一个字符0次或1次 |
| | 表示或者,即同时过滤多个字符串 |
() | 分组过滤被括起来的东西表示一个整体,另外()的内容可以被后面的\n 引用,n为数字,表示引用第几个括号的内容 |
\n | 引用前面()小括号里的内容,例如:(aa)\1,匹配aaaa |
a{n,m} | 匹配前一个字符最少n次,最多m次 |
a{n,} | 匹配前一个字符最少n次 |
a{n} | 匹配前一个字符正好n次 |
a{,m} | 匹配前一个字符最多m次 |
sed命令 经常使用
egrep “(0)(0)\1\2” dalei.txt
\1可以取第一个括号的内容
\2可以取第二个括号内容。
获取主机IP地址
ifconfig eth0|sed -rn ‘2s#^.inet (.) net.*$#\1#gp’