Day9
1 正则表达式(Regular Expression)
1.1 简介
正则表达式使用字符串来描述、匹配符合句法规则的字符串,它能被被用来检索、替换符合这个模式的文本。
1.2 基本句法
符号 | 作用 | 示例 |
---|
| | 表示选择 | boy|girl 可以匹配 boy 或者 girl。 |
+ | 前面的字符必须出现至少一次(>=1) | goo+gle 可以匹配 gooogle,goooogle 等 |
? | 前面的字符最多出现一次(0或1) | colou?r,可以匹配 color 或者 colour |
* | 都可以(0到多次) | 0*42 可以匹配 42、042、0042、00042 |
() | 定义模式字符串的范围和优先级 | gr(a|e)y 等价于 gray|grey、(grand)?father 匹配 father 和 grandfather |
\ | 将下一个字符标记为一个特殊字符、或一个原义字符 | n 匹配字符 n。\n 匹配一个换行符。序列 \ 匹配 \ 而 ( 则匹配 ( |
^ | 匹配输入字符串的开始位置 | |
$ | 匹配输入字符串的结束位置 | |
{n} | n 是一个非负整数。只匹配确定的 n 次 | o{2} 不能匹配 Bob 中的 o,但是能匹配 food 中的两个 o |
{n,} | n 是一个非负整数。至少匹配 n 次 | o{2,} 不能匹配 Bob 中的 o,但能匹配 foooood 中的所有 o。o{1,} 等价于 o+。o{0,} 则等价于 o* |
{n,m} | m 和 n 均为非负整数,其中 n<=m。逗号和两个数之间不能有空格。最少匹配 n 次且最多匹配 m 次 | o{1,3} 将匹配 fooooood 中的前三个 o,o{0,1} 等价于 o?。 |
* | 匹配前面的子表达式零次或多次 | zo* 能匹配 z、zo 以及 zoo。* 等价于 {0,} |
+ | 匹配前面的子表达式一次或多次 | zo+ 能匹配 zo 以及 zoo,但不能匹配 z。+ 等价于 {1,} |
? | 匹配前面的子表达式零次或一次 | do(es)? 可以匹配 do 或 does 中的 do。? 等价于 {0,1} |
. | 匹配除 \n 之外的任何单个字符 | 要匹配包括 \n 在内的任何字符,请使用类似 (.|\n) 的模式 |
(pattern) | 匹配 pattern 并获取这一匹配的子字符串。 | 该子字符串用于向后引用。要匹配圆括号字符,请使用 ( 和 )。 |
x | y | 匹配 x 或 y。 | “z|food”能匹配 z 或 food。“(z|f)ood”则匹配 zood 或 food。 |
[xyz] | 字符集合(character class)。匹配所包含的任意一个字符。 | [abc] 可以匹配 plain 中的 a。其中特殊字符仅有反斜线 \ 保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果出现在首位则仅作为普通字符。 |
[^xyz] | 排除型(negate)字符集合。匹配未列出的任意字符。 | [^abc] 可以匹配 plain 中的 plin。 |
特殊符号
特殊符号 | 说明 |
---|
[:alnum:] | 代表英文大小写字母及数字,亦即 0-9,A-Z,a-z |
[:alpha:] | 代表任何英文大小写字母,亦即 A-Z,a-z |
[:blank:] | 代表空白键与 [Tab] 按键两者 |
[:cntrl:] | 代表键盘上面的控制按键,亦即包括 CR,LF,Tab,Del… |
[:digit:] | 代表数字而已,亦即 0-9 |
[:graph:] | 除了空白字节(空白键与 [Tab] 按键)外的其他所有按键 |
[:lower:] | 代表小写字母,亦即 a-z |
[:print:] | 代表任何可以被列印出来的字符 |
[:punct:] | 代表标点符号(punctuation symbol),即:",’,?,!,;,:,#,$… |
[:upper:] | 代表大写字母,亦即 A-Z |
[:space:] | 任何会产生空白的字符,包括空格键,[Tab],CR 等等 |
[:xdigit:] | 代表 16 进位的数字类型,因此包括: 0-9,A-F,a-f 的数字与字节 |
优先级
优先级为从上到下从左到右,依次降低
运算符 | 说明 |
---|
\ | 转义符 |
(),(?😃,(?=),[] | 括号和中括号 |
*,+,?,{n},{n,},{n,m} | 限定符 |
^,$,\ 任何元字符 | 定位点和序列 |
| | 选择 |
1.3 grep命令
参数 | 说明 |
---|
-E | POSIX 扩展正则表达式,ERE |
-G | POSIX 基本正则表达式,BRE |
-P | Perl 正则表达式,PCRE |
-b | 将二进制文件作为文本来进行匹配 |
-c | 统计以模式匹配的数目 |
-i | 忽略大小写 |
-n | 显示匹配文本所在行的行号 |
-v | 反选,输出不匹配行的内容 |
-r | 递归匹配查找 |
-A n | n 为正整数,表示 after 的意思,除了列出匹配行之外,还列出后面的 n 行 |
-B n | n 为正整数,表示 before 的意思,除了列出匹配行之外,还列出前面的 n 行 |
–color=auto | 将输出中的匹配项设置为自动颜色显示 |
1.4 sed命令
seq基本命令格式:
sed [参数]… [执行命令] [输入文件]…
参数 | 说明 |
---|
-n | 安静模式,只打印受影响的行,默认打印输入数据的全部内容 |
-e | 用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加该参数 |
-f filename | 指定执行 filename 文件中的命令 |
-r | 使用扩展正则表达式,默认为标准正则表达式 |
-i | 将直接修改输入文件内容,而不是打印到标准输出设备 |
sed -i 's/sad/happy/' test
# 表示将test文件中的"sad"替换为"happy"
sed 执行命令格式:
[n1][,n2]command
[n1][~step]command
内容 | 说明 |
---|
n1,n2 | 输入内容的行号 |
, (逗号) | 从 n1 到 n2 行 |
~ (波浪号) | 从 n1 开始以 step 为步进的所有行 |
command | 执行动作 |
#其中一些命令可以加入作用范围
sed -i 's/sad/happy/g' test
# g 表示全局范围
sed -i 's/sad/happy/4' test
# 4 表示指定行中的第四个匹配字符串
常用命令:
命令 | 说明 |
---|
s | 行内替换 |
c | 整行替换 |
a | 插入到指定行的后面 |
i | 插入到指定行的前面 |
p | 打印指定行,通常与 -n 参数配合使用 |
d | 删除指定行 |