[toc]
grep命令
正则表达式
基本正则表达式
| 元字符 | 功能 | 示例 | 示例匹配对象 | 实际匹配示例 |
|---|---|---|---|---|
^ | 行首定位符 | ^love | 匹配所有以 love 开头的行 | love is in the air(匹配),I love coding(不匹配) |
$ | 行尾定位符 | love$ | 匹配所有以 love 结尾的行 | I love(匹配),I love coding(不匹配) |
* | 前边的字符连续出现0次或多次 | *love | love 前边有0个或多个连续出现的字符 | love(匹配),alove(匹配),aaalove(匹配),blove(不匹配) |
. | 匹配除换行外的多个字符 | l..e | 字母 l 和 e 之间有2个任意字符 | like(匹配),love(不匹配,因为 . 只匹配一个字符),lame(匹配) |
[] | 匹配中括号内的任意字符 | [lL]ove | 匹配 love 或 Love | love(匹配),Love(匹配),dove(不匹配) |
[^] | 匹配不在中括号内的任意字符 | [^a-km-z]ove | 匹配包含 ove ,但 ove 之前的那个字符不在 a 至 k 或 m 至 z 之间的字符 | Love(匹配),Move(匹配),Jove(不匹配),Kove(不匹配) |
\(\) | 分组,主要做反向引用 | (a)\1 | (a): 这个部分会捕获字符 a,并将其存储在第一个捕获组中。\1: 这是一个反向引用,指的是第一个捕获组中的内容。也就是说,\1 会匹配捕获组中已经匹配到的内容(在这里就是字符 a)因此,(a)\1 这个正则表达式会匹配两个连续的 a,即 aa![]() | aa(匹配),a(不匹配),aaa(匹配前两个 a) |
& | 保存查找串以便在替换中引用 | s/love/& | & 代表查找串,将 love 替换为 love,也就是不对文本进行任何改变 | I love you 替换结果为 I love you(不变) |
\< | 词首定位符 | <love | 匹配以 love 开头的单词的行 | love is kind(匹配),belove(不匹配),Love story(匹配) |
\> | 词尾定位符 | love> | 匹配以 love 结尾的单词的行 | I truly love(匹配),lovely(不匹配),mylove(不匹配) |
x\{m\} | 连续 m 个 x | x{5} | 前边的 x 连续出现5次 | xxxxx(匹配),xxxx(不匹配),xxxxxx(匹配前5个) |
x\{m,\} | 至少 m 个 x | x{5,} | 前边的 x 连续出现至少5次 | xxxxx(匹配),xxxxxx(匹配),xxxx(不匹配) |
x\{m,n\} | 至少 m 个 x ,至多 n 个 x | x{3,5} | 前边的 x 最少出现3次,最多出现5次 | xxx(匹配),xxxx(匹配),xxxxx(匹配),xxxxxx(匹配前5个) |
扩展正则表达式
| 元字符 | 功能 | 示例 | 示例匹配对象 | 实际匹配示例 |
|---|---|---|---|---|
? | 前边的字符出现0词或1词 | m? | 匹配前边的 m 出现0次或1次 | map(匹配 m),ap(匹配,m 不出现),mmmmm(只匹配第一个 m) |
+ | 前边的字符连续出现1词或多次 | m+ | 匹配前边的 m 出现1次或多次 | m(匹配),mm(匹配),mmm(匹配),amap(匹配 m,忽略其他) |
| ` | ` | 或者 | `m | n` |
() | 分组,主要是向后引用 | (aaa)\1 | 引用前边的第一个分组,\1 表示引用 | aaaaaa(匹配前两个 aaa),aaabbb(不匹配),aaaaaaa(匹配前两个 aaa 和下一个 a) |
{m} | 前边的字符正好出现m次 | a{m} | 前边的字符 a 出现 m 次 | aaa(匹配),aa(不匹配),aaaa(匹配前3个 a) |
{m,} | 前边的字符最少出现 m 次 | a{m,} | 前边的字符 a 最少出现 m 次 | aa(匹配),aaaa(匹配),a(不匹配) |
{m,n} | 前边的字符最少出现 m 次,最多出现 n 次 | a{m,n} | 前边的字符 a 最少出现 m 次,最多出现 n 次 | aa(匹配),aaa(匹配),aaaa(匹配),aaaaa(匹配前4个 a) |
