grep
1. 介绍¶
Linux grep
命令用于查找文件里符合条件的字符串。作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一。
语法
grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help] [范本样式][文件或目录...]
首先谈一下grep命令的常用格式为:grep [选项] ”模式“ [文件]
grep
家族总共有三个:grep
,egrep
,fgrep
。
grep -E
=egrep
参数:
- -a 或 --text : 不要忽略二进制的数据。
- -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
- -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
- -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
- -c 或 --count : 计算符合样式的列数。
- -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
- -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
- -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
- -E 或 --extended-regexp : 将样式为延伸的普通表示法来使用。
- -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
- -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
- -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
- -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
- -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
- -i 或 --ignore-case : 忽略字符大小写的差别。
- -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
- -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
- -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
- -o 或 --only-matching : 只显示匹配PATTERN 部分。
- -q 或 --quiet或--silent : 不显示任何信息。
- -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
- -s 或 --no-messages : 不显示错误信息。
- -v 或 --revert-match : 显示不包含匹配文本的所有行。
- -V 或 --version : 显示版本信息。
- -w 或 --word-regexp : 只显示全字符合的列。
- -x --line-regexp : 只显示全列符合的列。
- -y : 此参数的效果和指定"-i"参数相同。
常用选项
-E :开启扩展(Extend)的正则表达式。 -i :忽略大小写(ignore case)。 -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。 -n :显示行号 -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。 -o :只显示被模式匹配到的字符串。 --color :将匹配到的内容以颜色高亮显示。 -A n:显示匹配到的字符串所在的行及其后n行,after -B n:显示匹配到的字符串所在的行及其前n行,before -C n:显示匹配到的字符串所在的行及其前后各n行,context
2. 例子¶
grep -c "48" test.txt 统计所有以“48”字符开头的行有多少 grep -i "May" test.txt 不区分大小写查找“May”所有的行) grep -n "48" test.txt 显示行号;显示匹配字符“48”的行及行号,相同于 nl test.txt |grep 48) grep -v "48" test.txt 显示输出没有字符“48”所有的行) grep "471" test.txt 显示输出字符“471”所在的行) grep "48;" test.txt 显示输出以字符“48”开头,并在字符“48”后是一个tab键所在的行 grep "48[34]" test.txt 显示输出以字符“48”开头,第三个字符是“3”或是“4”的所有的行) grep "^[^48]" test.txt 显示输出行首不是字符“48”的行) grep "[Mm]ay" test.txt 设置大小写查找:显示输出第一个字符以“M”或“m”开头,以字符“ay”结束的行) grep "K…D" test.txt 显示输出第一个字符是“K”,第二、三、四是任意字符,第五个字符是“D”所在的行) grep "[A-Z][9]D" test.txt 显示输出第一个字符的范围是“A-D”,第二个字符是“9”,第三个字符的是“D”的所有的行 grep "[35]..1998" test.txt 显示第一个字符是3或5,第二三个字符是任意,以1998结尾的所有行 grep "4\{2,\}" test.txt 模式出现几率查找:显示输出字符“4”至少重复出现两次的所有行 grep "9\{3,\}" test.txt 模式出现几率查找:显示输出字符“9”至少重复出现三次的所有行 grep "9\{2,3\}" test.txt 模式出现几率查找:显示输出字符“9”重复出现的次数在一定范围内,重复出现2次或3次所有行 grep -n "^$" test.txt 显示输出空行的行号 ls -l |grep "^d" 如果要查询目录列表中的目录 同:ls -d * ls -l |grep "^d[d]" 在一个目录中查询不包含目录的所有文件 ls -l |grpe "^d…..x..x" 查询其他用户和用户组成员有可执行权限的目录集合
元数据
[root@cai ~]# ls data [root@cai ~]# cat data root:x:0:0:root:/root:/bin/bash ROOT:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin cmz:x:1000:1000::/home/cmz:/bin/bash yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash 带行号显示 [root@cai ~]# cat -n data 1 root:x:0:0:root:/root:/bin/bash 2 ROOT:x:0:0:root:/root:/bin/bash 3 bin:x:1:1:bin:/bin:/sbin/nologin 4 ntp:x:38:38::/etc/ntp:/sbin/nologin 5 nscd:x:28:28:NSCD Daemon:/:/sbin/nologin 6 cmz:x:1000:1000::/home/cmz:/bin/bash 7 yzc:x:1001:1000::/home/yzc:/bin/bash 8 YZC:x:1001:1000::/home/yzc:/bin/bash 9 YZC123:x:1001:1000::/home/yzc123:/bin/bash
2.1 不带参数¶
[root@cai ~]# grep yzc data yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash
匹配到数据不分大小写,属于贪婪匹配,只有包含的
yzc
都过滤处理。
2.2 显示行号 -n¶
[root@cai ~]# grep -n yzc data 7:yzc:x:1001:1000::/home/yzc:/bin/bash 8:YZC:x:1001:1000::/home/yzc:/bin/bash 9:YZC123:x:1001:1000::/home/yzc123:/bin/bash
匹配到的数据显示当前的行号
2.3 显示匹配到的总行数 -c¶
[root@cai ~]# grep yzc data yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash [root@cai ~]# grep -c yzc data 3
2.4 只显示匹配的元素 -o¶
[root@cai ~]# grep yzc data yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash [root@cai ~]# grep -o yzc data yzc yzc yzc yzc [root@cai ~]# grep -on yzc data 7:yzc 7:yzc 8:yzc 9:yzc
2.5 精确匹配 -w |\b¶
[root@cai ~]# grep yzc data yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash [root@cai ~]# [root@cai ~]# grep -w yzc data yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash
-w
表示精确匹配,不是包含关系,比如是精确。
[root@cai ~]# cat cdata cmz1234 cmz12345 ccmz123 cccmz12 ccccmz1 cccccmz [root@cai ~]# grep '\bcmz1234\b' cdata cmz1234 [root@cai ~]# grep -w 'cmz1234' cdata cmz1234
2.6 忽略大小写 -i¶
[root@cai ~]# cat data root:x:0:0:root:/root:/bin/bash ROOT:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin cmz:x:1000:1000::/home/cmz:/bin/bash yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash [root@cai ~]# grep root data root:x:0:0:root:/root:/bin/bash ROOT:x:0:0:root:/root:/bin/bash [root@cai ~]# grep ROOT data ROOT:x:0:0:root:/root:/bin/bash [root@cai ~]# grep -i ROOT data root:x:0:0:root:/root:/bin/bash ROOT:x:0:0:root:/root:/bin/bash
2.7 排除 -v¶
只打印没有匹配的,而匹配的反而不打印。
[root@cai ~]# cat data root:x:0:0:root:/root:/bin/bash ROOT:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin cmz:x:1000:1000::/home/cmz:/bin/bash yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash [root@cai ~]# grep yzc data yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash [root@cai ~]# grep -v yzc data root:x:0:0:root:/root:/bin/bash ROOT:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin cmz:x:1000:1000::/home/cmz:/bin/bash
2.8 高亮显示¶
[root@cai ~]# grep --color yzc data yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash [root@cai ~]# alias |grep grep alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto'
默认匹配到的数据是高亮显示的
2.9 显示匹配到后N行 -A¶
显示匹配到的字符串所在的行及其后n行,after
[root@cai ~]# cat data root:x:0:0:root:/root:/bin/bash ROOT:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin cmz:x:1000:1000::/home/cmz:/bin/bash yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash [root@cai ~]# grep cmz data cmz:x:1000:1000::/home/cmz:/bin/bash [root@cai ~]# grep -A1 cmz data cmz:x:1000:1000::/home/cmz:/bin/bash yzc:x:1001:1000::/home/yzc:/bin/bash [root@cai ~]# grep -A2 cmz data cmz:x:1000:1000::/home/cmz:/bin/bash yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash
2.10 显示匹配到前N行 -B¶
显示匹配到的字符串所在的行及其后n行,before
[root@cai ~]# cat data root:x:0:0:root:/root:/bin/bash ROOT:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin cmz:x:1000:1000::/home/cmz:/bin/bash yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash [root@cai ~]# grep cmz data cmz:x:1000:1000::/home/cmz:/bin/bash [root@cai ~]# grep -B1 cmz data nscd:x:28:28:NSCD Daemon:/:/sbin/nologin cmz:x:1000:1000::/home/cmz:/bin/bash [root@cai ~]# grep -B2 cmz data ntp:x:38:38::/etc/ntp:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin cmz:x:1000:1000::/home/cmz:/bin/bash
2.11 显示匹配到前后N行 -C¶
显示匹配到的字符串所在的行及其后n行,context
[root@cai ~]# cat data root:x:0:0:root:/root:/bin/bash ROOT:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin cmz:x:1000:1000::/home/cmz:/bin/bash yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash YZC123:x:1001:1000::/home/yzc123:/bin/bash [root@cai ~]# grep cmz data cmz:x:1000:1000::/home/cmz:/bin/bash [root@cai ~]# grep -C1 cmz data nscd:x:28:28:NSCD Daemon:/:/sbin/nologin cmz:x:1000:1000::/home/cmz:/bin/bash yzc:x:1001:1000::/home/yzc:/bin/bash [root@cai ~]# grep -C2 cmz data ntp:x:38:38::/etc/ntp:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin cmz:x:1000:1000::/home/cmz:/bin/bash yzc:x:1001:1000::/home/yzc:/bin/bash YZC:x:1001:1000::/home/yzc:/bin/bash
2.12 空行 ^$¶
[root@cai ~]# cat ndata 1 2 3 [root@cai ~]# grep '^$' ndata [root@cai ~]# grep -v '^$' ndata 1 2 3 [root@cai ~]# grep -n '^$' ndata 2:
2.13 多参数匹配¶
怎么使用 grep 的“或”匹配? 就是使用 | 加上-E
[root@cai ~]# cat edata root:x:0:0:root:/cmz ROOT:x:0:0:root:ROOT yzc:x:1001:1000::/home/yzc yz1c:x:1001:1000::/home/yzc yz12c:x:1001:1000::/home/yz12c cdyzc:x:1001:1000::/cdyzc YZC:x:1001:1000::/home/YZC YZC123:x:1001:1000::/home/YZC123 123 456 abc edf [root@cai ~]# grep '123|abc' edata # 错误。必须加-E或者使用egrep [root@cai ~]# grep -E '123|abc' edata YZC123:x:1001:1000::/home/YZC123 123 abc [root@cai ~]# egrep '123|abc' edata YZC123:x:1001:1000::/home/YZC123 123 abc
3. 正则表达式¶
正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列
^ 锚定行的开始 如:'^grep'匹配所有以grep开头的行。 $ 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。 . 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。 + 匹配前面的子表达式一次或多次。 ? 匹配前面的子表达式,最多一次。 * 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。 [] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 [^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 \(..\) 标记匹配字符,如'\(love\)',love被标记为1。 \ 锚定单词的开始,如:'\匹配包含以grep开头的单词的行。 \> 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。 x\{m\} 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 x\{m,\} 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。 x\{m,n\}重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。 \w 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。 \b 单词锁定符,如: '\bgrep\b'只匹配grep。
3.1 以什么开头 ^¶
[root@cai ~]# cat edata root:x:0:0:root:/cmz ROOT:x:0:0:root:ROOT yzc:x:1001:1000::/home/yzc cdyzc:x:1001:1000::/cdyzc YZC:x:1001:1000::/home/YZC YZC123:x:1001:1000::/home/YZC123 [root@cai ~]# grep '^c' edata cdyzc:x:1001:1000::/cdyzc [root@cai ~]# grep '^y' edata yzc:x:1001:1000::/home/yzc [root@cai ~]# grep -i '^y' edata yzc:x:1001:1000::/home/yzc YZC:x:1001:1000::/home/YZC YZC123:x:1001:1000::/home/YZC123
-i 忽视大小写,^ 以什么为开头
3.2 以什么结尾 $¶
[root@cai ~]# cat edata root:x:0:0:root:/cmz ROOT:x:0:0:root:ROOT yzc:x:1001:1000::/home/yzc cdyzc:x:1001:1000::/cdyzc YZC:x:1001:1000::/home/YZC YZC123:x:1001:1000::/home/YZC123 [root@cai ~]# grep "z$" edata root:x:0:0:root:/cmz [root@cai ~]# grep "3$" edata YZC123:x:1001:1000::/home/YZC123
3.2 匹配一个非换行符的字符 .¶
[root@cai ~]# cat edata root:x:0:0:root:/cmz ROOT:x:0:0:root:ROOT yzc:x:1001:1000::/home/yzc yz1c:x:1001:1000::/home/yzc yz12c:x:1001:1000::/home/yz12c cdyzc:x:1001:1000::/cdyzc YZC:x:1001:1000::/home/YZC YZC123:x:1001:1000::/home/YZC123 [root@cai ~]# grep "yz.c" edata yz1c:x:1001:1000::/home/yzc [root@cai ~]# grep "yz..c" edata yz12c:x:1001:1000::/home/yz12c
. 表示一个任意占用符。'yz.c'匹配gr后接一个任意字符。
3.3 匹配零个或多个先前字符 *¶
'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[root@cai ~]# cat edata root:x:0:0:root:/cmz ROOT:x:0:0:root:ROOT yzc:x:1001:1000::/home/yzc yz1c:x:1001:1000::/home/yzc yz12c:x:1001:1000::/home/yz12c cdyzc:x:1001:1000::/cdyzc YZC:x:1001:1000::/home/YZC YZC123:x:1001:1000::/home/YZC123 [root@cai ~]# grep 'yz*' edata yzc:x:1001:1000::/home/yzc yz1c:x:1001:1000::/home/yzc yz12c:x:1001:1000::/home/yz12c cdyzc:x:1001:1000::/cdyzc
3.4 匹配一个指定范围内的字符 []¶
[] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[root@cai ~]# grep '[1-9]' edata yzc:x:1001:1000::/home/yzc yz1c:x:1001:1000::/home/yzc yz12c:x:1001:1000::/home/yz12c cdyzc:x:1001:1000::/cdyzc YZC:x:1001:1000::/home/YZC YZC123:x:1001:1000::/home/YZC123 [root@cai ~]# grep '[2-3]' edata yz12c:x:1001:1000::/home/yz12c YZC123:x:1001:1000::/home/YZC123
3.5 匹配一个不在指定范围内的字符 [^]¶
[^] 匹配一个不在指定范围内的字符,如:
^[a-z]
匹配不包含a-z
[root@cai ~]# cat edata root:x:0:0:root:/cmz ROOT:x:0:0:root:ROOT yzc:x:1001:1000::/home/yzc yz1c:x:1001:1000::/home/yzc yz12c:x:1001:1000::/home/yz12c cdyzc:x:1001:1000::/cdyzc YZC:x:1001:1000::/home/YZC YZC123:x:1001:1000::/home/YZC123 123 456 abc edf [root@cai ~]# grep '[^a-z]' edata root:x:0:0:root:/cmz ROOT:x:0:0:root:ROOT yzc:x:1001:1000::/home/yzc yz1c:x:1001:1000::/home/yzc yz12c:x:1001:1000::/home/yz12c cdyzc:x:1001:1000::/cdyzc YZC:x:1001:1000::/home/YZC YZC123:x:1001:1000::/home/YZC123 123 456
注意颜色
3.6 标记匹配字符 (..)¶
\(..\) 标记匹配字符,如'\(cmz\)',cmz被标记为1。 \ 锚定单词的开始,如:'\匹配包含以grep开头的单词的行。 \> 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
[root@cai ~]# cat edata root:x:0:0:root:/cmz ROOT:x:0:0:root:ROOT yzc:x:1001:1000::/home/yzc yz1c:x:1001:1000::/home/yzc yz12c:x:1001:1000::/home/yz12c cdyzc:x:1001:1000::/cdyzc YZC:x:1001:1000::/home/YZC YZC123:x:1001:1000::/home/YZC123 123 456 abc edf [root@cai ~]# grep '\(cmz\)' edata root:x:0:0:root:/cmz
3.7 重复¶
x\{m\} 重复字符x,m次,如:'c\{5\}'匹配包含5个c的行。 x\{m,\} 重复字符x,至少m次,如:'c\{5,\}'匹配至少有5个o的行。 x\{m,n\}重复字符x,至少m次,不多于n次,如:'c\{5,10\}'匹配5--10个c的行
[root@cai ~]# cat edata root:x:0:0:root:/cmz ROOT:x:0:0:root:ROOT yzc:x:1001:1000::/home/yzc yz1c:x:1001:1000::/home/yzc yz12c:x:1001:1000::/home/yz12c cdyzc:x:1001:1000::/cdyzc YZC:x:1001:1000::/home/YZC YZC123:x:1001:1000::/home/YZC123 123 456 abc edf [root@cai ~]# cat cdata cmz1234 cmz12345 ccmz123 cccmz12 ccccmz1 cccccmz [root@cai ~]# grep 'c\{1\}' cdata cmz1234 cmz12345 ccmz123 cccmz12 ccccmz1 cccccmz [root@cai ~]# grep 'c\{1,\}' cdata cmz1234 cmz12345 ccmz123 cccmz12 ccccmz1 cccccmz [root@cai ~]# grep 'c\{2,3\}' cdata ccmz123 cccmz12 ccccmz1 cccccmz [root@cai ~]# grep 'c\{4,\}' cdata ccccmz1 cccccmz
[root@cai ~]# egrep 'c{2,3}' cdata ccmz123 cccmz12 ccccmz1 cccccmz [root@cai ~]# egrep 'c{2}' cdata ccmz123 cccmz12 ccccmz1 cccccmz [root@cai ~]# egrep 'c{2,}' cdata ccmz123 cccmz12 ccccmz1 cccccmz
3.8 特殊¶
放在括号内的表达式,即包在 "[:" 和 ":]" 之间的字符类的名字,它表示的是属于此类的所有字符列表。标准的字符类名称如下: [[:alnum:]] - 字母数字字符 [[:alpha:]] - 字母字符 [[:blank:]] - 空字符: 空格键符 和 制表符 [[:digit:]] - 数字: '0 1 2 3 4 5 6 7 8 9' [[:lower:]] - 小写字母: 'a b c d e f g h i j k l m n o p q r s t u v w x y z' [[:space:]] - 空格字符: 制表符、换行符、垂直制表符、换页符、回车符和空格键符 [[:upper:]] - 大写字母: 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'
[root@cai ~]# cat adata 123 abc ABC a12b AB23 AAA [root@cai ~]# grep [[:space:]] adata [root@cai ~]# grep [[:upper:]] adata ABC AB23 AAA [root@cai ~]# grep [[:lower:]] adata abc a12b [root@cai ~]# grep [[:digit:]] adata 123 a12b AB23 [root@cai ~]# grep [[:blank:]] adata [root@cai ~]# grep [[:alpha:]] adata abc ABC a12b AB23 AAA [root@cai ~]# grep [[:alnum:]] adata 123 abc ABC a12b AB23 AAA
其他
grep -c "48" test.txt 统计所有以“48”字符开头的行有多少 grep -i "May" test.txt 不区分大小写查找“May”所有的行) grep -n "48" test.txt 显示行号;显示匹配字符“48”的行及行号,相同于 nl test.txt |grep 48) grep -v "48" test.txt 显示输出没有字符“48”所有的行) grep "471" test.txt 显示输出字符“471”所在的行) grep "48;" test.txt 显示输出以字符“48”开头,并在字符“48”后是一个tab键所在的行 grep "48[34]" test.txt 显示输出以字符“48”开头,第三个字符是“3”或是“4”的所有的行) grep "^[^48]" test.txt 显示输出行首不是字符“48”的行) grep "[Mm]ay" test.txt 设置大小写查找:显示输出第一个字符以“M”或“m”开头,以字符“ay”结束的行) grep "K…D" test.txt 显示输出第一个字符是“K”,第二、三、四是任意字符,第五个字符是“D”所在的行) grep "[A-Z][9]D" test.txt 显示输出第一个字符的范围是“A-D”,第二个字符是“9”,第三个字符的是“D”的所有的行 grep "[35]..1998" test.txt 显示第一个字符是3或5,第二三个字符是任意,以1998结尾的所有行 grep "4\{2,\}" test.txt 模式出现几率查找:显示输出字符“4”至少重复出现两次的所有行 grep "9\{3,\}" test.txt 模式出现几率查找:显示输出字符“9”至少重复出现三次的所有行 grep "9\{2,3\}" test.txt 模式出现几率查找:显示输出字符“9”重复出现的次数在一定范围内,重复出现2次或3次所有行 grep -n "^$" test.txt 显示输出空行的行号 ls -l |grep "^d" 如果要查询目录列表中的目录 同:ls -d * ls -l |grep "^d[d]" 在一个目录中查询不包含目录的所有文件 ls -l |grpe "^d…..x..x" 查询其他用户和用户组成员有可执行权限的目录集合