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

egrep和grep和正则表达式_grep  egrep 正则表达式

 grep还能用管道处理前面命令输出的信息上面的命令可以:

   cat /etc/passwd | grep --color -n "root"

grep常用用法2:“.”匹配任意单个字符

查找/etc/passwd文件中以r开头以t结尾中间包含两个任意字符的字符

   grep --color -n "r..t" /etc/passwd

egrep和grep和正则表达式_grep  egrep 正则表达式_02

grep常用用法3“$”锚定行尾

查找/etc/passwd文件中以bash结尾的行

   grep --color -n "bash$" /etc/passwd

egrep和grep和正则表达式_grep  egrep 正则表达式_03

grep常用用法4“^” 锚定行首

查找/etc/passwd文件中以r开头的行

egrep和grep和正则表达式_grep  egrep 正则表达式_04

     所以^$表示匹配空白行

grep常用用法5“<” 锚定词首,“>”锚定词尾,”*“ 匹配前面出现的字符任意次

查找/etc/passwd文件中以r开头以t结尾的单词

   grep --color "\<r[a-z]*t\>" /etc/passwd

egrep和grep和正则表达式_grep  egrep 正则表达式_05

   因为<,>是特殊符号所以加\转意

grep常用用法6   匹配前面出现的字符特定次数 {m}:匹配m{m,n}mn

{m,}: 至少m{0,n}:至多n

查找/etc/passwd文件中以r开头中间有15个任意字符以t结尾的字符串

egrep和grep和正则表达式_grep  egrep 正则表达式_06


grep常用用法7 “()”分组7

在判断前面的字符出现的次数时()里面的是一起出现的

如:匹配文件123中的808080

grep --color -n "\<\(80\)\{1,2\}\>"   123

egrep和grep和正则表达式_grep  egrep 正则表达式_07

grep常用用法8  “\1”引用前面第一个小括号里匹配到的所有内容,“\2”就是第二个

查找系统中uid=gid的用户

egrep和grep和正则表达式_grep  egrep 正则表达式_08


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



egrepgrep一样只是{}()等特殊符号不用加\进行转意而且egrep支持“|”

进行“或”比对比如:查找文件中带有goodgold的行

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,\}[^[: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