grep文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能够被模式所匹配到的行
格式:grep [options] 'PATTERN' file,...
grep 常用选项:
--color=auto:用颜色显示匹配到的字符。
-n: 显示行号
-o: 仅显示被模式匹配到的字串,而非整行
-i: 不区分字符大小写,ignore-case
-E: 支持扩展的正则表达式 grep -E = egrep
-A #:也显示匹配到的行的下面#行
-B #:也显示匹配到的行的下面#行
-C #:也显示匹配到的行的上下#行
grep常用用法1:查找特定字符串
查找/etc/passwd文件中包含“root”的行
grep --color -n "root" /etc/passwd
grep还能用管道处理前面命令输出的信息上面的命令可以:
cat /etc/passwd | grep --color -n "root"
2:“.”匹配任意单个字符
/etc/passwd文件中以r开头以t结尾中间包含两个任意字符的字符
grep --color -n "r..t" /etc/passwd
grep常用用法3“$”锚定行尾
bash结尾的行
grep --color -n "bash$" /etc/passwd
4“^” 锚定行首
r开头的行
所以^$表示匹配空白行
5“<” 锚定词首,“>”锚定词尾,”*“ 匹配前面出现的字符任意次
t结尾的单词
grep --color "\<r[a-z]*t\>" /etc/passwd
因为<,>是特殊符号所以加\转意
6 匹配前面出现的字符特定次数 {m}:匹配m次{m,n}m到n次
{m,}: 至少{0,n}:至多r开头中间有1到5个任意字符以t结尾的字符串
在判断前面的字符出现的次数时()里面的是一起出现的
如:匹配文件123中的8080或80
grep --color -n "\<\(80\)\{1,2\}\>" 123
8 “\1”引用前面第一个小括号里匹配到的所有内容,“\2”就是第二个
查找系统中uid=gid的用户
grep用法9
[]:指定范围内的任意单个字符
[0-9]=[[:digit:]]所有数字
[a-z]=[[:lower:]]所有小写字母
[A-Z]=[[:upper:]]所有大写
[[:alpha:]]任何数字和字母
[[:alnum:]]所有字母
[[:space:]]空格
[[:punct:]]标点符号
[^]:指定范围外的任意单个字符
/etc/passwd中的所有数字:grep --color=auto "\<[0-9]\{1,\}\>" /etc/passwd
/etc/passwd中以不是r开头的行:grep--color=auto “^[^r]” /etc/passwd
egrep和grep一样只是{}()等特殊符号不用加\进行转意而且egrep支持“|”
进行“或”比对比如:查找文件中带有good或gold的行
egrep “good|gold” flie 也可以写成 egrep “go(o|l)d” file
能力有限可能有的例子写错了,但是符号表示的意思没错,欢迎指正
贴点转载的练习
1、显示/proc/meminfo文件中以大小写s开头的行; # grep "^[sS]" /proc/meminfo # grep -i "^s" /proc/meminfo 2、取出默认shell为非bash的用户; # grep -v "bash$" /etc/passwd | cut -d: -f1 3、取出默认shell为bash的且其ID号最大的用户; # grep "bash$" /etc/passwd | sort -n -t: -k3 | tail -1 | cut -d: -f1 4、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; # grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit 5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; # grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf 6、找出/etc/passwd文件中一位数或两位数; # grep --color=auto "\<[0-9]\{1,2\}\>" /etc/passwd 7、找出ifconfig命令结果中的1到255之间的整数; # ifconfig | grep -E --color=auto "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>" 8、查看当前系统上root用户的所有信息; # grep "^root\>" /etc/passwd 9、添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户; # grep --color=auto "^\([[:alnum:]]\{1,\}\)\>.*\1$" /etc/passwd 10、找出netstat -tan命令执行的结果中以“LISTEN”或“ESTABLISHED”结尾的行; 11、取出当前系统上所有用户的shell,要求:每种shell只显示一次,且按升序显示; # cut -d: -f7 /etc/passwd | sort -u