9.1 正则介绍_grep(上)(中)(下)
什么是正则
正则就是一串有规律的字符串(包含特殊符号)
作用
掌握好正则对于编写shell脚本有很大帮助
在哪里有正则
各种编程语言中都有正则,原理都一样的
在shell当中非常重要的工具
grep/egrep egrep 是grep 的扩展
sed, awk
grep
grep 【-cinvAVC】‘word’filename , grep 选项 要过滤的字符 文件名
-c 行数 过滤出来的行 一共有多少行
-i 不区分大小写
-n 显示行号
-v 取反 把你要过滤的字符不显示出来,把剩余的显示出来
-r 遍历要搜寻目录的所有子目录,过滤出包含你要的字符的所有文件内容。
-A 后面跟数字,过滤出符合要求的行以及下面n行(下面的行不管包含不包含要过滤的字符)
-B 后面跟数字,过滤出符合要求的行以及上面n行(下面的行不管包含不包含要过滤的字符)
第一行 以为上面没有了 就不列出来了
-C 后面跟数字,同时过滤符合要求的行以及上下各n行
grep 只是实现正则的工具
grep / egrep 示例
grep -n 'root' /etc/passwd
grep -nv 'nologin' /etc/passwd
以下就是正则表达式
grep '[0-9]' /etc/inittab 过滤出包含 0-9的字符行
grep -v '[0-9]'/etc/inittab 过滤出不包含0-9的字符行 (第九行跟第十行没有)
grep -v '^#' /etc/inittab(文件) 过滤出不以# 注释符号开头的文件
grep -v '^#' /etc/inittab -v '^$'
grep '^[^a-zA-Z]' test.txt ^ 放方括号外代表以某个字符开头,放方括号内表示非指定字符。(也就是不包含指定字符)
例子, 过滤出不包含字母的开头的行 -v是取反 ^ [^0-9] ^方括号是以指定字符开头的行。^方括号内是取非, 反反得正。就是过滤以0-9开头的字符行
grep 'r,o' test.txt 过滤出 r?o 的字符串的行 ?任意一个字符
grep 'o*o' passwd o*o 表达的意思是,*左边的字符重复0-n次,最后以o结尾
grep '.*' passwd .* 表示任意字符
例子 匹配出 aming开头 bash结尾 ‘aming.*bash' 就可以’
grep 'o\{2\}' /etc/passwd ‘o\{2\}’ 表示o出现两次, 可以写一个范围 ‘o\{0,3\}’ 0个到3个的o
egrep 可以把需要脱义的特殊符号 不需要使用脱义符号 或者grep -E
egrep 'o{2}' /etc/passwd
egrep 'o+o' /etc/passwd + 表示 +前面字符的一次或多次,*则是0次或多次。
egrep 'oo?' /etc/passwd ?表示?前面字符的0次或一次。
egrep 'root|nologin' /etc/passwd | 表示或者的意思
egrep '(oo){2}' /etc/passwd 过滤出 oo组合 出现2次的 字符行