文本查看工具:less,more,cat,tail,head
文本检索工具:grep,egrep,fgrep,find
文本处理工具:sort,cut,awk,sed

grep是基于正则表达式对指定文本进行搜索操作

1.基本正则表达式

  • 正则表达式:由一类特殊字符及文本字符缩编写的模式,其有些字符不表示其字面含义,而是用于表示控制或通配的功能。

  • 分为两类:基本正则表达式、扩展正则表达式

    1.1 字符匹配:

  • ".":匹配任意单个字符

  • "[]":匹配范围的任意单个字符

  • "[^]":匹配范围的任意单个字符

  • "[:digit:]":任意单个数字

  • "[:lower:]":任意单个小写字母

  • "[:upper:]":任意单个大写字母

  • "[:alpha:]":任意单个字母(不区分大小写

  • "[:alnmu:]":任意单个字符(不区分大小写字母,数字

  • "[:space:]":任意空字符

    1.2 次数匹配

  • "*":匹配前面的字符任意次(0,1,或多次)

  • ".*":匹配任意长度的任意字符

  • "+":匹配前面的字符至少一次("",斜线为转义

  • "\?":匹配前面的字符0次或1次,即前面的字符可有可无

  • "{\m,}":其前面的字符出现至少m次,m为非负整数

  • "{0,n}":其前面的字符至多出至多n次

  • "{m,n}":其前面的字符出现至少m次,至多n次

    1.3 位置锚定

    限制使用模式搜索文本,限制模式所匹配到的文本只能出现于目标文本的哪个位置;

  • "^":行首锚定,用于匹配模式的最左侧

  • "$":行尾锚定,用于匹配模式的最右侧

    1.4 单词锚定

    单词:由非特殊字符组成的连续字符(字符串)都称为单词;

  • "\<或\b":词首锚定,用于单词模式的左侧

  • ">或\b":词尾锚定,用于单词模式的右侧

  • "\":单词锚定\>

2. 扩展正则表达式:egrep

支持使用扩展正则表达式的grep命令,相当于grep -E.

2.1 字符匹配:

  • ".":任意单个字符

  • "[ ]":范围内任意单个字符

  • "[^ ]":范围外任意单个字符

2.2 次数匹配

  • "*":任意次

  • "?":0次或1次

  • "+":1次或多次

  • "{m}":匹配m次

  • "{m,n}":至少m次,至多n次

  • "{0,n}":至多n次

  • "{m,}":至少m次

2.3 位置锚定

  • "^”:行首锚定

  • "$":行尾锚定

  • "\<,\b":词尾锚定

  • "/>,\b":词尾锚定

2.4 或者

  • "a|b":a或者b

  • "C|cat":C或者cat

  • "(C|c)at":Cat或cat

3.grep命令选项

常用选项:

  • -i:忽略字符大小写

  • -o:仅显示匹配到的文本本身

  • -v:反向匹配

  • -E:支持扩展的正则表达式

  • -q,--quite:静默模式,不输出任何信息

###4.示例

1.显示/etc/passwd文件中不以bash结尾的行

grep -v "bash$" /etc/passwd  
grep -o "^bash$" /etc/passwd

2.找出/etc/passwd文件中还不宜bash结尾的行

grep "\<[0-9]\{3,4\}\>" /etc/passwd  
egrep "\<[0-9]{3,4}\>" /etc/passswd

3.找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了一个非空白字符的行

grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg

4.找出"netstat -tan"命令中,以"LISTEN"后跟0或多个空白字符结尾的行

netstat -tan | grep "LISTEN[["space"]]*$"

5.找出"fdisk -l"命令的结果中,包含以/dev/后跟sd或hd及一个小字母的行

fdisk -l | grep "/dev/[sh]d[a-z]\>"

6.找出"ldd /usr/bin/cat"命令结果中文件路径

ldd /bin/ab |sed '1d'|egrep  "/[^[:space:]]+"

7.找出/proc/meminfo文件中,所有以大写或小写s开头的行

grep "^[Ss]" /tmp/meminfo
egrep "^[S|s]" /tmp/meminfo
grep -i "^s" /tmp/meminfo

8.显示当前系统上root,centos,slackware用户的相关信息

egrep "^(root|centos|slackware)" /etc/passwd

9.echo一个绝对路径,取出其基名

echo /etc/httpd/conf | egrep -o "[^/]+/?$"echo /etc/httpd/conf | egrep -o "/.*/"  #取出其路径名

10.找出ifconfig命令中的1-255之间的整数

ifconfig|egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"