grep
字符匹配
. :匹配单个字符
[ ]:匹配范围内的任意单个字符
匹配次数
\?:匹配前面的字符0次或一次,意味着可有可无;
*:匹配前面的字符0次或任意次
.*:匹配任意长度的任意字符
\+:匹配前面的字符1次或任意次,意味着至少一次
\{n\}:匹配其前面的字符n次;
\{n,m\}:匹配其前面的字符至少n次,至多m次;
\{0,n\}:匹配前面的字符至多n次
\{m,\}:至少m次
匹配位置
^:行首锚定,用于模式的最左侧;
$:行尾锚定,用于模式的最右侧;
^PATTERN$:用于PATTERN来匹配整行;
^$:空白行;
\< 或 \b:词首锚定,用于单词模式的左侧;
\> 或 \b:词尾锚定,用于单词模式的右侧;
\<PATTERN\>:匹配完整单词;
其他及特殊的posix字符
\w:匹配字母、数字和下划线等于[A-Za-z0-9]
\W:匹配非字母、非数字和非下划线[^A-Za-z0-9]
\n:匹配一个换行符
\r:匹配一个回车符
\t:匹配一个制表符
\s:匹配任何空白字符
\S:匹配任何非空白字符
\f:匹配一个换页符
[[:alnum:]] 文字数字字符(除去符号之外,数字、字母都可以包括中文!)
[[:alpha:]] 文字字符(字母,包括中文)
[[:digit:]] 数字字符(阿拉伯数字)
[[:graph:]] 非空字符(排除空格、tab键)
[[:print:]] 非空字符(包括空格,空格认为非空,tab键不适用)
[[:lower:]] 小写字符
[[:upper:]] 大写字符
[[:cntrl:]] 控制字符
[[:punct:]] 标点,符号(包括常用符号)
[[:space:]] 所有空白字符(新行,空格,制表符)
[[:xdigit:]] 十六进制数(0-9,a-f,A-F)
举例说明
(test.txt为测试文件)
1.查找含有“name”的行
grep "name" test.txt
2.查找以"name"开头的行
grep "^name" test.txt
3.查找以大写字母开头的行
grep ^[[:upper:]] test.txt
4.查找包含数字的行
grep [[:digit:]] test.txt
5.查找带有单引号的行
grep ".*'.*'.*" test.txt
6.查找带有双引号的行
grep ".*\".*\".*" test.txt
7.搜索双引号里面带单引号的行
grep "\".*'.*'.*\"" test.txt
8.查找空白行,并算出多少行
grep -c [[:space:]] test.txt
9.查找非空白行,并算出有多少行
grep -c [[:graph:]] test.txt 有空格也认为空
grep -c [[:print:]] test.txt 空格不算空,tab算空
10.查找带有标点符号的行
grep [[:punct:]] test.txt
11.搜索以y开头、中间肯定有字符、末尾是o的行、并显示出上下各2行的内容。
grep -C 2 "^y.*o$" test.txt
12.搜索以字母g开头包含两个o以上的单词
grep "\b^go\{2,\}" test.txt
13.搜索精确匹配到含有day的单词的行。
grep "\<day\>" test.txt
14.搜索一个包含od的行,d字母可有可无,不限次数。
grep "od*" test.txt
15.搜索一些行,该行包括某个单词,并满足一下条件:
第一个字符可以是Y或y
第二个字符可以是o或者没有
第三个字符可以是任意字符
第四个字符匹配前一个字符,0次或任意次
grep "^[Yy]o\?.*" test.txt