linux基础之正则表达式
目录
正则表达式
1、正则表达式的分类(依赖于grep)
1.普通正则表达式
2.拓展正则表达式
2、普通正则表达式
2.1 ^ : 以某字符开头
[root@mysql03 ~]# grep '^#' ./2.txt # 匹配当前目录下文件2.txt中以警号开头的行
2.3 $ : 以某字符结尾
[root@mysql03 ~]# grep 'c$' ./2.txt # 匹配当前目录下文件2.txt中以c开头的行
2.4 . : 匹配除换行符之外的任意单个字符
[root@mysql03 ~]# grep '.' ./2.txt # 匹配当前目录下文件2.txt中除了换行符之外的任意字符
2.5 * :匹配前导字符的任意个数
[root@mysql03 ~]# grep '123454*' ./2.txt # 匹配当前目录下文件2.txt中包含有123454这几个字符任意个数的行
2.6 [] : 匹配中括号内容中的任意一个字符
[root@mysql03 ~]# grep '[1234]' ./2.txt # 匹配当前目录下文件2.txt中包含有1234这串字符中任意一个字符的行
2.7 [^内容] : 匹配除了中括号内容外的任意字符
[^ ] : 匹配除了中括号内容外的任意字符
[root@mysql03 ~]# grep '[^1234]' ./2.txt
2.8 [a-z] : 匹配小写字母
[root@mysql03 ~]# grep '[a-z]' ./2.txt
2.9 [A-Z] : 匹配大写字母
[root@mysql03 ~]# grep '[A-Z]' ./2.txt
2.10 [a-zA-Z] : 匹配字母
[root@mysql03 ~]# grep '[a-zA-Z]' ./2.txt
2.11 [0-9] : 匹配数字
[root@mysql03 ~]# grep '[0-9a-zA-Z]' ./2.txt
2.12 \ : 取消转义
[root@mysql03 ~]# grep '\ ' ./2.txt # 匹配当前目录下文件2.txt中的空行
2.13 () : 分组
\n : 代表第n个分组
3、拓展正则
{} : 匹配的次数
{n} : 匹配n次
{n,} :至少匹配n次
{n,m} :匹配 n 到 m 次
{,m} :最多匹配m次
+ :匹配至少有一个前导字符
? : 匹配一个或零个前导字符
| :或
4、正则表达式练习题
案例1:在/etc/passwd文件中,匹配以ftp开头的行
grep '^ftp' /etc/passwd
案例2:在/etc/passwd文件中,匹配以bash结尾的行
grep 'bash$' /etc/passwd
案例3:匹配本机中的ip
方法1:ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'
方法2:ip a | grep -E '([(1[0-9]{2}){3}(2[0-4][0-9]){3}(25[0-4]){3}[0-9]{1,2}]\.){3}[(1[0-9]{2}){3}(2[0-4][0-9]){3}(25[0-4]){3}[0-9]{1,2}]'
案例4:要求将/etc/fstab中去掉包含 # 开头的行,且要求 # 后至少有一个空格打印出来
grep -vE '^#\ +' /etc/fstab
案例5:找出文件中至少有一个空格的行
grep -E '\ +' xxx
案例6:将 nginx.conf 文件中以#开头的行和空行,全部删除
grep -vE '^\ *#|^$' /etc/nginx/nginx.conf