文本处理三剑客:Grep、Sed、Awk
这三个工具都是基于对文本的内容进行增删改查的操作,此篇着重介绍grep与正则表达式的应用,以及扩展正则表达式。
正则表达式
什么是正则表达式?
它是由一类特殊字符以及文本字符所编写的一种模式,处理文本当中的内容;其中的一些字符不表示字符的字面含义,这些字符表示控制或者通配的功能,正则表达式可以对命令结果和文件内容都可以进行匹配。
通配符常用符号
而通配符仅仅只能匹配文件名、目录名,不能匹配文件的内容;
- *: 匹配任意一个或多个字符 例:ls *.txt
- ?:匹配任意一个字符 例:ls ?.txt
- [ ] :匹配范围内的任意单个字符 例:touch {a..z}.txt ls [a-z].txt
基本正则常用符号
基本正则:字符匹配,元字符,匹配的部分需要用引号引起来。
- .:表示匹配任意的单个字符,可以是一个汉字 例:ls | grep "abc."
- \:表示转义符
- \.: 仅仅表示一个点,无其它含义
- ():表示分组的意思
- \(\):这时仅表示括号
- [ ]:匹配已指定范围内的任意单个字符
例:ls | grep "[0-9 a-z A-Z]" 展示所有数组以及大小写字母- [ ^ ]:表示取反,指定范围外的
例:ls | grep "[A-Z0-9.]"- [[ :blank: ]]:匹配空白字符(空格和tab键)
- 例:以rc开头,任意单个字符,0-6的数字
- 只匹配以rc.为开头的文件
- 过滤/etc/passwd中任意的两个字符r和t
正则次数的表达式
- *:匹配前面的字符任意次,有多少匹配多少;也称贪婪模式
- .*:也是匹配任意长度的字符,但是至少要有一次,不包括0次;最少前面要有一个o,否则不匹配
- \?:表示匹配前面的字符0次或者1次(即可有可无) 有则匹配,没有也匹配
- \+:匹配前面的字符至少一次,最多可以无数次
- \{n\}:匹配前面的字符=n次 精确匹配 n:表示前面字符出现的次数,多一次少一次都不行、、
- \{m,n\}:匹配前面的字符最少m次,最多n次
- \{,n\}:匹配前面的字符最多n次
- \{n,\}:匹配前面的字符至少n次
匹配次数就是核心
位置锚定
以什么为开头 以什么为结尾
- ^:以什么为开头,在模式的左侧 ^r 以r为开头
- $:以什么最为结尾,在模式的右侧 r$ 以r为结尾
- ^ root $:用于匹配整行,而且整行中只有一个 root才显示
- ^$:匹配空行
- 词首锚定:>或者 \b
- 词尾铆钉:<或者 \b
推荐用\b 统一来判断词首和词尾
例:
输入词首就是词首搜索,输入词尾就是词尾搜索
\ |:表示逻辑或
扩展正则表达式
扩展正则与基本正则意思相同,仅仅区别于写法上的不同;通常使用扩展正则,更加的直观。
它的表达格式为:egrep 或 grep -E 所有的 \ 斜杠都可去掉