企业常用Linux正则表达与三剑客知识
正则表达
处理大量字符串文本定义的一套规则与方法
Linux三剑客正则表达式特点
- 工作上,一次处理一行
- 正则表达式可以将复杂的任务处理为简单的,提高操作Linux效率
- 仅被三剑客(grep/egrep,sed,awk)命令支持
正则表达式:为过滤特殊字符串而生
正则表达式与通配符有本质去别的:
通配符:所有的命令支持
正则表达式只支持三剑客
在centos6 之前是没有这一种标记的,centos7开始官方加上了这个标记(alias egrep=’egrep --color=auto‘)
LC_ALL环境变量设置
我们以后在工作中/安装好虚拟机,安装对应的yum/epel/网络工具时候,后面也可以进行配置LC_ALL(三剑客环境变量配置)
建议配置:配置后操作时不会出现异常匹配情况(export LC_ALL=C)
在命令行输入:
vim etc/profile编辑输入:
export LC_ALL=C并保存
. /etc/profile运行文件
echo $LC_ALL是否有C显示,有就是成功,否则重新来一遍配置操作
第二种处理方式:
EOF后面不要用多余的空格:
cat >>/etc/profile<<EOF
alias grep=‘grep --color=auto’
alias egrep=‘egrep --color=auto’
export LCALL=C
注意:eof前后都没有空格和其他符号
EOF
使用修改的内容生效
source /etc/profile
正则表达式的分类
基本正则表达式:
BRE对应的元字符:^$.[]*
扩展正则表达式:
ERE在BRE基础上增加了(){}?+|
基础正则表达式
实验环境:
mkdir ~/test -p
cat >~/test/wulin.txt<<EOF
i am wulin!
i study linux.
i like playgames ,and chinese chess!
my qq num is 99999999.
not 6763873677
EOF
给过滤的内容添加标识,把符合的标识内容过滤
^ 尖角号,^wulin,表示匹配以wulin为单词开头的行
$ 美元符,wulin$,表示匹配以wulin单词结尾的行
^ $组合符,表示空行(以 结尾的行)或者以 开头的行
. 点号,匹配任意的一个且只有一个字符
\转义符,特殊含义的字符让本有的含义显出原形(不受别的含义干扰)
(*) 重复前一个字符(来纳许0次或1次以上,当为0次的时候,表示什么也没有)
(0 * )所有的都出来了:
(. * )匹配所有的内容
(^. *) 匹配任意多个字符结尾的内容
( . *$)任意多个字符结尾的内容
[abc]匹配[]集合内的任意一个字符a,b,c;
([abc]匹配不包含 后面的任意字符a,b,c
,这里的^表示对[a,b,c]的取反,不能用!进行替代
测试题
1.过滤/etc/passwd中以nologin结尾的行
2.过滤/etc/passwd中以o开头的行
3.过滤/etc/passwd中至少含有1个0字符串的行
4.过滤/etc/目录中(不含子目录)下的所有文件
5.过滤/etc/services中含有点号的行
扩展正则
条件:grep -E====egrep
(+)匹配前一个字符1次或多次
与区别,可以匹配0次
匹配0个0,或1个0,或多个0
[root@calms test3]# grep "0" wulin.txt
匹配一个0或多个0
[root@calms test3]# grep “0*” wulin.txt
[ : /]+ 匹配括号内的:或/字符1次或多次
egrep “[: /]+” wulin.txt
egrep -o 参数把匹配的内容放在一列进行打印
?匹配前一个字符0次或1次
| 表示或者,同时过滤多个字符串
egrep “000|wulin” wulin.txt
0 分组过滤括起来的东西表示一个整体,另外0的内容可以被后面的\n进行引用,n为数字,表示引用第几个括号的内容
\n 引用前面()括号内的内容
a{n,m}匹配前一个字符最少n次,最多m次
a{n,}匹配前一个字符最少n次
a{n} 匹配前一个字符正好n次
a{,m}匹配前一个字符最多m次
特殊预定义表达式(了解)
元字符表达式(了解)
Sed(stream editor)命令
对文件实现快速增删改查,查询最强大的是取行与替换
取行和替换
sed [选项] [sed内置命令字符] [输入文件]
options[选项] 解释说明
- -n取消默认的sed输出,常与sed内置命令的p连用
- -i 直接修改文件的内容,而不是输出到终端 如果不使用-i选项sed只是修改在内存中的数据,并不会影响磁盘上的文件
- -e 允许多次编辑
p 全拼为print,表示