一.正则表达式
1.什么是正则表达式 ?
一个正则表达式就是描述了一个字符串集合的方式。正则表达式的表示就是一些特殊符号的组合,而每个符号代表着一些具体的意思。符合的组合就定义了一套规则和方法,其主要作用就是从大量文本从匹配出符合条件行。
2.正则表达式的使用场景
在Linux中,正则表达式的主要使用场景就是文本处理三剑客。grep,sed,awk .除此之外,vi指令也支持正则表达式。
3.正则表达式字符表示
在正则表达式中,又可以分为基本正则表达式和扩展正则表达式 。其主要区别在于:
- 基本正则表达式只认识元字符,其元字符主要包括:^ $ . [] * ,具体含义见下表格
- 扩展正则表达式有添加了() {} ? + | 等符号
以下为各个元字符的含义
扩展正则中支持的字符
预定义字符类
4.它们之间的区别
在上面我们提到正则包括基础正则和扩展正则,但是它们有什么区别呢?在什么地方使用呢 ? 接下来我们主要说明在Linux 三剑客中的不同(grep,sed,awk)
- grep : 在grep中,如果只是使用grep ,那只能使用原字符的正则以及预定义字符类,而若想使用扩展正则中包含的字符,就必须在grep后加参数-E 。
- sed :若要使用而扩展正则中包含的字符,就必须在sed后加参数-r。
二.grep命令
作用:
- 用于打印匹配给定模式的行
语法:
grep [options] PATTERN [FILE...] grep [options] [-e PATTERN | -f FILE] [FILE...]
说明:
grep指令用于搜索所给定的模式(PATTERN )的FILE 文件里的内容 ,如果从文件内容里找到了该模式的文件内容,grep会把匹配的该行显示出来。若不指定任何文件,或给的文件名为- , 则grep会从标准输入读取内容。
另外,也可以使用两个变种程序 egrep 和 fgrep 。 Egrep 与 grep -E 相同。 Fgrep 与 grep -F 相同。
选项:options
说明
重点
虽然在上面我们可以看到,grep中有很多选项,但是在工作中,大多数的选项是用不到的,这里我们划一下重点。
常用参数
实例
使用到文件info,通过grep来进行过滤,info的文件内容如下:
- 查找文件info中包含ccc的内容并打印行数
grep -n "ccc" info
2. 查找文件info中包含ggg且忽略大小写的字符并打印,
grep -i "ggg" info
3.过滤掉含有ccc的行
grep -v "ccc" info
4. 查找包含ddd,eee,fff的行(注意:以下匹配用到正则)
grep -E "ddd|eee|fff" info
5. 查找以c开头的行
grep ^c info
6.查找以ccx开头且结尾的行
grep ^ccx$ info
7. 查找d字符前可以是任意字符的行
grep .d info
8.查找包含一个或多个d字符的行
grep -E d{1} info
9. 显示包含a,b,c的字符的行 ; 显示不包含a,b,c字符的行
包含:grep -i ^[abc] info
不包含: grep -i [^abc] info (是全部字符不包含a或b或c)
10. 显示包含一个或多个含有a字符的行
grep -E a+ info
11. 查找以cc开头且包含c,x,ld字符的行
grep -E "cc(c|x|ld)" info
12. 查找文件中所有的大写字符
grep [[:upper:]] info
13. 匹配任意一个字母和数字字符
grep [[:alnum:]] info