grep
-i 不区分大小写
-v --invert-match 反选
-c --count 匹配次数
-l --files-with-matches 打印文件名
-L --files-without-match 打印出不匹配的文件名
-n --line-number 打印出匹配行的行号
-h --no-filename 不打印文件名
元字符
^ $ . [ ]{}-?*+() |\
. 代表任意字符
^ 匹配行首
$ 匹配行尾
^& 匹配空行
[] 里边的字符,是要匹配的字符集,元字符在里边代表字面意义。但是^代表否,-代表范围。
但是 grep -h '[A-Z]' dirlist*.txt 代表A-Z的所有字符, grep -h '[-AZ]' dirlist*.txt 代表-、A、Z三个字符。
[A-Z] 可能存在字典序/ascii序的问题,所以有一种替代的方案,不会存在这种问题。
[:alnum:] 大写字母+小写字母+数字
[:word:] 大写字母+小写字母+数字+下划线(_)
[:alpha:] 大写字母+小写字母
[:blank:] 空格和tab键
[:digit:] 数字[0-9]
[:lower:] 小写字母
[:space:] [ \t\r\n\v\f]
[:upper:] 大写字母
[:xdigit:] 16进制,[0-9A-Fa-f]
用法:要放在[]内,
ls /usr/sbin/[[:upper:]]*
基础正则与扩展正则
基础的支持 ^ $ . [ ]* ,除此之外都认为是字面值,扩展的还支持:( ) { } ?+|
egrep 或者 grep -E 支持扩展正则。
基础正则里边,(, ), {, and }前面加上反斜线\,也会视为元字符。
| 表示或逻辑
() 表示一个作用域
数量词
?匹配一个字符0或1次
* 匹配一个字符0或多次
+ 匹配一个字符1或多次
{ } 匹配一个字符指定次
{n} 匹配指定n次
{n,m} 匹配[n,m]次
{n,} 匹配>=n次
{,m} 匹配<=m次
vim的查找支持正则,只不过只支持基本正则,扩展的元字符前需要加反斜线,例如:
/([0-9]\{3\}) [0-9]\{3\}-[0-9]\{4\}