一、文本搜索工具——grep
grep -参数 条件 文件名
其中参数有以下:
-i 忽略大小写-c 统计匹配的行数-v 取反,不显示匹配的行-w 匹配单词-E 等价于 egrep ,即启用扩展正则表达式-n 显示行号-rl 将指定目录内的文件打印-A 数字 匹配行及以下 n 行-B 数字 匹配行及以上 n 行-C 数字 匹配行及上下 n 行-q 静默模式,没有任何内容输出,使用 $? 来判断是否执行成功-o 只显示匹配的内容
二、正则表达式常见元字符
POSIX字符类:POSIX字符类是一个形如 [:...:] 的特殊元序列(meta sequence),他可以用于匹配特定的字符范围
三、扩展正则表达式
四、实验
# 显示/etc/passwd 中以bash结尾的行信息[root@server ~]# grep -n "bash$" /etc/passwd# 找出/etc/passwd中包含三位数或者四位数的行信息[root@server ~]# grep -n "\<[0-9]\{3,4\}\>" /etc/passwd# 上例改写[root@server ~]# grep -n "\<[[:digit:]]\{3,4\}\>" /etc/passwd# 检索/etc/grub2.cfg文件中,以至少一个空白字符开头,后面跟上非空白字符的行[root@server ~]# grep -n "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg# 分析# ^[[:space:]] :表示以空白字符开头# \+:grep不支持扩展正则的元字符,需要转义# [^[:space:]]:不包含非空白字符# grep可以使用-E参数启用扩展正则,命令改为:[root@server ~]# grep -nE "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg# 也可以使用egrep,其支持扩展正则,命令改为[root@server ~]# egrep -n "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg# 检索netstat -tan 命令的运行结果中,以“LISTEN”后跟上0个或多个空白字符结尾的行信息[root@server ~]# netstat -tan | grep "LISTEN[[:space:]]*$"# *$表示重复前面0次或多次,$为结尾# 检索fdisk -l 命令结果中,包含以/dev/开头后跟上n的行信息[root@server ~]# fdisk -l | grep "^/dev/n"# 检索 ldd /usr/bin/cat 命令结果中的文件路径[root@server ~]# ldd /usr/bin/cat | grep -oE "/[^[:space:]]+"# -o:只显示检索命中的标红内容# -E:启用扩展正则# 检索/proc/meminfo文件中,所有以大写A或大写S开头的行信息[root@server ~]# grep -n "^[AS]" /proc/meminfo# 显示/etc/passwd文件中当root、sshd、chrony的相关信息[root@server ~]# egrep -n "(root|sshd|chrony)" /etc/passwd# 需要使用egrep,其支持扩展正则# (|) 会对|左右两边的整体内容进行匹配# echo输出一个绝对路径,使用egrep取出其基名[root@server ~]# echo /etc/yum.repos.d/ | egrep -o [^/]+/?$# 检索ifconfig命令结果的1-255之间的整数[root@server ~]# ifconfig | egrep -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"