linux 正则、通配符
grep [options] regex [file...]
选项 |
描述 |
-i |
忽略大小写。不会区分大小写字符。也可用--ignore-case 来指定。 |
-v |
不匹配。通常,grep 程序会打印包含匹配项的文本行。这个选项导致 grep 程序只会打印不包含匹配项的文本行。也可用--invert-match 来指定。 |
-c |
打印匹配的数量(或者是不匹配的数目,若指定了-v 选项),而不是文本行本身。 也可用--count 选项来指定。 |
-l |
打印包含匹配项的文件名,而不是文本行本身,也可用--files-with-matches 选项来指定。 |
-L |
相似于-l 选项,但是只是打印不包含匹配项的文件名。也可用--files-without-match 来指定。 |
-n |
在每个匹配行之前打印出其位于文件中的相应行号。也可用--line-number 选项来指定。 |
-h |
应用于多文件搜索,不输出文件名。也可用--no-filename 选项来指定。 |
grep bzip a*.txt 在a开头的txt文件里搜索bzip
grep -h '[-AZ]' dirlist*.txt 连字符-放在开头 表示其本身
-A3 显示后面3行 -B2 显示前面两行
[:lower:] 是 a-z [[:lower:]]就是[a-z]
grep -e a -e b abc.txt 匹配a或者e
+ ? | () 等需要使用grep -E 或者 egrep, grep不支持
通配符不止下面这几种
通配符 |
意义 |
* |
匹配任意多个字符(包括零个或一个) |
? |
匹配任意一个字符(不包括零个) |
[characters] |
匹配任意一个属于字符集中的字符 |
[!characters] |
匹配任意一个不是字符集中的字符 ^ ? |
[[:class:]] |
匹配任意一个属于指定字符类中的字符 |
字符类 |
意义 |
[:alnum:] |
匹配任意一个字母或数字 |
[:alpha:] |
匹配任意一个字母 |
[:digit:] |
匹配任意一个数字 |
[:lower:] |
匹配任意一个小写字母 |
[:upper:] |
匹配任意一个大写字母 |
示例
模式 |
匹配对象 |
* |
所有文件 |
g* |
文件名以“g”开头的文件 |
b*.txt |
以"b"开头,中间有零个或任意多个字符,并以".txt"结尾的文件 |
Data??? |
以“Data”开头,其后紧接着3个字符的文件 |
[abc]* |
文件名以"a","b",或"c"开头的文件 |
BACKUP.[0-9][0-9][0-9] |
以"BACKUP."开头,并紧接着3个数字的文件 |
[[:upper:]]* |
以大写字母开头的文件 |
[![:digit:]]* |
不以数字开头的文件 |
*[[:lower:]123] |
文件名以小写字母结尾,或以 “1”,“2”,或 “3” 结尾的文件 |