grep 是linux下强大的文本搜索工具
grep: (global search regular expression(RE) and print out the line
原理:根据用户指定的文本模式,对文本进行一行一行的搜索,显示被模式所匹配到的行。
grep 可以使用正则表达式,来进行模式匹配
格式:grep [options] 'PATTERN' file,...
注意:PATTERN中如果没有变量等特殊意思的字符建议使用 单引号 ' ' ,否则使用双引号 " "
常用选项:
-v: 反向,显示不能被模式所匹配到的行;
-o:仅显示被模式匹配到的字串,而非整行;
-i: 不区分字符大小写, ignore-case
-E:支持扩展的正则表达式
-A #: 显示匹配到的行,附加显示匹配到的 下第#行
-B #: 显示匹配到的行,附加显示匹配到的 上#行
-C #: 显示匹配到的行,附加显示匹配到的 上下#行
--color=auto :让匹配到的文本以颜色显示
示例:
1、显示/proc/meminfo文件中以大小写s开头的行;
# grep -i '^s' /proc/meminfo # -i 意思是不区分大小写 # grep '^[sS]' /proc/meminfo # [] 中括号表示取字符集中的其中一个
2、取出默认shell为非bash的用户;
# grep -v 'bash$' /etc/passwd # linux中文本默认以$为结束符,-v 为取反。
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/sysinit
5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
# grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf
6、找出/etc/passwd文件中一位数或两位数;
# grep '\<[0-9]\{1,2\}\>' /etc/passwd #其中一对尖括是用来锚定的, 要不然像1234,这样的数也会匹配到的,题目中明确1位或2位
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相同的用户;
# useradd bash ;useradd testbash; useradd basher # 多个命令用分号隔开 # grep '^\([[:alnum:]]\{1,\}\).*\1$' /etc/passwd
10、找出netstat -tan命令执行的结果中以“LISTEN”或“ESTABLISHED”结尾的行;
# netstat -tan | grep -E --color=auto '(LISTEN|ESTABLISHED)[[:space:]]*$'
11、取出当前系统上所有用户的shell,要求:每种shell只显示一次,且按升序显示;
# cut -d : -f7 /etc/passwd | sort -u