linux学习笔记(十二)
正则表达式基础
1.正则表达式 regular expression
一个正则表达式通常被称为一个模式(pattern),为来描述或者匹配一系列符合某个句法规则的字符串。
2.基本语法
选择:
| “boy|girl”可以匹配boy或girl
数量限定:
- 表示前面的字符必须出现至少一次(1次或多次),如“goo+gle”可以匹配“gooole”,“goooole”
? 表示前面的字符最多出现一次(0次或1次),如“colou?r”可以匹配“color”、“colour”
- 表示前面的字符可以不出现、或者出现一次或者出现多次(0次、或1次、或多次),如“0*42”可以匹配42、042、0042、00042等
范围和优先级:
( ) 用来定义定义模式字符串的范围和优先级。
如gr(a|e)y 等级与gray|grey
(grand)?father 匹配father和grandfather
部分语法:
\ 将系一个字符标记为一个特殊字符或一个原义字符。如“n”匹配“n”,“\n”匹配换行符,“\”匹配\,\(匹配(
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
{n} n是一个非负整数,匹配确定的n次
{n,} n是一个非负整数,至少匹配n次。{1,}等价于+,{0,}等价于*
{n,m} n,m均为非负整数,n<m,最少匹配n次,最多匹配m次
- 匹配前面的子表达式零次或多次
- 匹配前面的子表达式一次或多次
? 匹配前面的子表达式零次或一次
? 当?紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面,匹配模式是非贪婪的,非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式尽可能多的匹配所搜索的字符串。如“00000”,“0+?”匹配“0”,“0+”匹配所有0
(patter)匹配pattern并获取之一匹配的子字符串
x|y 匹配x或y
[xyz] 字符集合,匹配所包含的任意一个字符。其中特殊字符仅有反斜线\保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现在首位则仅作为普通字符
[^xyz] 排除型字符集合。匹配未列出的任意字符。
[a-z] 字符范围,匹配制定范围内的任意字符
[^a-z] 排除型字符范围。匹配任何不在制定范围内的任意字符
3.优先级
转义符、括号中括号、限定符、定位点和序列(^,$,\任何元字符)、选择
4.grep模式匹配命令
grep命令用于打印输出文本中匹配的模式串,使用正则表达式作为匹配条件。
grep 参数 模式 file
-b 将二进制文件作为文本来进行匹配
-c 统计与模式匹配的数目
-i 忽略大小写
-n 显示匹配文本所在行的行号
-v 反选,输出不匹配行的内容
-r 递归匹配查找
-A n after,除列出匹配行外,还列出后面的n行
-B n before,除列出匹配行外,还列出前面的n行
--color=auto 将输出的匹配项设置为自动颜色显示
grep支持三种正则表达式引擎
-E ERE,扩展正则表达式
-G BRE,基本正则表达式
-P PCRE ,perl正则表达式
5.使用正则表达式:
基本正则表达式BRE
...位置:查找/etc/group文件中以“shiyanlou”开头的行
grep ‘shiyanlou’/etc/group
grep '^shiyanlou' /etc/group
...数量:
...选择:
完整的特殊符号及说明:
6.使用扩展正则表达式ERE
grep -E 或者用egrep
...数量:
...选择:
其中.有特殊含义,需要转义
7.sed流编辑器
sed工具用于过滤和转换文本的流编辑器
sed 参数 执行命令 file
-n 安静模式,只打印受影响的行,默认打印输入数据的全部内容。
-e 用于脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加盖参数
-f filename 执行指定filename文件中的命令
-r 使用扩展正则表达式,默认为标准正则表达式
-i 将直接修改输入文件内容,而不是打印到标准输出设备
sed编辑器的执行命令--略
8.awk文本处理工具--略