1.grep – 在文本文件中查找一个指定的正则表达式,并把匹配行输出到标准输出
-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选项来指定。
2.元字符和文本
正则表达式元字符由以下字符组成:
^ $ . [ ] { } - ? * + ( ) | \
然后其它所有字符都被认为是原义字符
- 任何字符:. 匹配在此位置的任意一个字符
$ grep -h '.zip' dirlist*.txt
- 锚点:插入符号和美元符号被看作是锚点,只有在文本行的开头或末尾被找到时,才算发生一次匹配
$ grep -h '^zip' dirlist*.txt
$ grep -h 'zip$' dirlist*.txt
- 中括号表达式和字符类
中括号表达式能够指定一个字符集合来被匹配
$ grep -h '[bg]zip' dirlist*.txt
- 否定
$ grep -h '[^bg]zip' dirlist*.txt
- 传统的字符区域
$ grep -h '^[A-Za-z0-9]' dirlist*.txt
- POSIX 字符集
[:alnum:] 字母数字字符。在 ASCII 中,等价于: [A-Za-z0-9]
[:word:] 与 [:alnum:] 相同, 但增加了下划线字符。
[:alpha:] 字母字符。在 ASCII 中,等价于: [A-Za-z]
[:blank:] 包含空格和 tab 字符。
[:cntrl:] ASCII 的控制码。包含了 0 到 31,和 127 的 ASCII 字符。
[:digit:] 数字 0 到 9
[:graph:] 可视字符。在 ASCII 中,它包含 33 到 126 的字符。
[:lower:] 小写字母。
[:punct:] 标点符号字符。在 ASCII 中,等价于:
[:print:] 可打印的字符。在 [:graph:] 中的所有字符,再加上空格字符。
[:space:] 空白字符,包括空格, tab,回车,换行, vertical tab, 和form feed. 在 ASCII 中,等价于: [ \t\r\n\v\f]
[:upper:] 大写字母。
[:xdigit:] 用来表示十六进制数字的字符。在 ASCII 中,等价于:[0-9A-Fa-f]
$ ls /usr/sbin/[[:upper:]]*
? - 匹配零个或一个元素
* - 匹配零个或多个元素
+ - 匹配一个或多个元素
{ } - 匹配特定个数的元素
n 匹配前面的元素,如果它确切地出现了 n 次。
n,m 匹配前面的元素,如果它至少出现了 n 次,但是不多于 m次。
n, 匹配前面的元素,如果它出现了 n 次或多于 n 次。
,m 匹配前面的元素,如果它出现的次数不多于 m 次。