[toc]
grep命令
1.正则表达式
1.1 基本正则表达式
元字符 | 功能 | 示例 | 示例匹配对象 | 实际匹配示例 |
---|---|---|---|---|
^ | 行首定位符 | ^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个) |