Linux Shell Scripting Cookbook 读书笔记 4
正则, grep
1. 正则表达式
正则表达式 | 描述 | 示例 |
^ | 行起始标记 | ^hell匹配以hell开头的行 |
$ | 行尾标记 | test$匹配以test结尾的行 |
. | 匹配任意一个字符 | hell.匹配hell1,hell2,但是不能匹配hell12,只能匹配单个字符 |
[] | 匹配包含在[字符]之中的任意一个字符 | test[123]匹配test1,test2,test3 |
[^] | 匹配除[^字符]之外的任意一个字符 | test[^12]不匹配test1,test2,匹配test3 |
[-] | 匹配指定范围内的任意一个字符 | [0-10],匹配0~10中的任意一个数字 |
? | 匹配之前的项1次或者0次 | hel?o匹配helo或者heo |
+ | 匹配之前的项1次或者多次 | hel+o匹配helo或者helllllo,但是不能匹配heo |
* | 匹配之前的项0次或多次 | hel*o匹配helo或者helllllo,也能匹配heo |
() | 创建一个用于匹配的子串 | ma(tri)?可以匹配ma或者matri |
{n} | 匹配之前的项n次 | [0-9]{3}匹配任意一个三位数 |
{n,} | 匹配之前的项至少n次 | [0-9]{3,}匹配任意一个三位或者更多位的数 |
{n,m} | 匹配之前的项n到m次 | [0-9]{3,4}匹配一个三位到四位的数 |
| | 匹配 | 两边的任意一项 | June (1st | 2nd)匹配June 1st或者June 2nd |
\ | 转义符可将上面的符号转义 | a\*b匹配a*b,不能匹配ab |
2. grep
递归搜索
grep "text" . -R -n
-R 表示在当前目录递归搜索,-n打印出匹配的文件的行号
如果需要排除目录,可以使用--exclude-dir
打印出匹配行的前后行
多个匹配以--分隔