您的位置:首页 > 运维架构 > Linux

Linux文本处理工具三剑客之grep

2016-03-12 20:33 405 查看
Linux家族关于文本处理的工具有三个,他们分别为grep、awk和sed,今天我就介绍一下grep文本处理工具。
首先,什么是grep呢? grep是一种文本搜索工具,基于“pattern”对给定文本进行搜索过滤,并对目标文本进行检查,并打印出符合条件的文本的一款文本处理工具。说到pattern,那么pattern又是什么呢?那就是大家所熟知的“正则表达式”。 grep家族又有三个成员:grep,egrep和fgrep。 grep: 支持正则表达式。 egrep:支持使用扩展的正则表达式。 fgrep:不支持使用正则表达式。 grep:grep [OPTIONS] PATTERN [FILE...],这个是grep使用时的语法,指的是 grep + 选项 + 正则表达式 + 文本文件 grep -i :忽略字符大小写
~]# grep -i 'uuid' /tmp/fstab
UUID=17caf342-d579-4dad-a16c-cf39353271c9 /
UUID=7ddc4cb3-07a9-47be-8273-afbded7b46e3 /boot
grep -o:仅显示匹配到的文本的自身
~]# grep -o'^UUID' /tmp/fstab
UUID
UUID
grep -v:反向匹配
~]# grep -v"bash$" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
基本正则表达式元字符 字符匹配:.:匹配任意单个字符
~]# grep 'p.' /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
[]:匹配范围内的任意单个字符:
~]# grep "[a]" /etc/fstab
# /etc/fstab
# Created by anaconda on Sun Feb 28 11:21:11 2016
[^]:匹配范围外的任意单个字符 说到范围,就简单的介绍一下特殊符号:[:alpha:]:代表任何英文字母(不区分大小写) [:digit:]:代表所有数字[:lower:]:代表所有的小写字母 [:upper:]:代表所有的大写字母[:alnum:]:代表所有英文大小写和数字 [:space:]:任何会产生空白的字符[:punct:]:代表标点符号 [:blank:]:代表空格键和Tab键 如果我们要取/etc/passwd下非字母的文本,即
~]# grep "[^[:alpha:]]" /etc/fstab
#
#/etc/fstab
#Created by anaconda on Sun Feb 28 11:21:11 2016
匹配次数:*:匹配前面的字符任意次(0,1或者多次)
~]# grep "o*t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.*:任意长度的任意字符
\+:匹配前面的字符至少1次
~]# grep "o\+t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
\{m\}:其前面的字符出现m次,m为非负整数
~]# grep "o\{2\}t" /etc/passwd
root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin
位置锚定:^:锚定行首,也就是最左侧 $:锚定行尾,即最右侧
~]# grep -i "^c" /etc/passwd
colord:x:998:996:User for colord:/var/lib/colord:/sbin/nologin
chrony:x:996:994::/var/lib/chrony:/sbin/nologin
以上就是c开头并且在行首的句子呗选出来了行尾锚定与行首锚定的用法大体相同,不过是将反三角号去掉,在行尾加上一个$("X$")egrep:什么是egrep呢?其实egrep就是支持使用扩展正则表达式的grep命令,也就是grep -E。 egrep也有着属于自己的扩展正则表达式的元字符 首先字符匹配: .:代表任意单个字符
~]# egrep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
只要有r和t的都会被找出来,其中是两个字符,所以最后一行的r/ft也会被选出来[]:匹配范围内的任意单个字符
~]# grep "[abc]" /etc/fstab
# /etc/fstab
# Created by anaconda on Sun Feb 28 11:21:11 2016
上面只要有abc其中一个字符,就会被选出来。[^]:代表匹配范围外的任意字符,用法与[]用法基本一样。 []与[^]都可以使用之前提到的[:alpha:][:lower:]等等的范围。 匹配次数: *:匹配任意次 ?:匹配0次或者1次 +:匹配一次或者多次 以上三种都与grep中的用法是一样的,在这里会说一下匹配具体次数的: {m}:匹配m次 {m,n}:最少匹配m次,最多匹配n次 {0,n}:最多匹配n次 {m,}: 最少匹配m次
~]# egrep "o{1,3}" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
上面就是以找出最少一个o,最多三个o的为例子来说明的。 接下来就是位置锚定了:
^:锚定行首 $:锚定行尾 \<, \b:锚定词首 \>, \b:锚定词尾行首行尾的锚定与grep的用法一样,在这里说一说词首词尾的锚定,在此就以词首锚定为例来说明。
~]# egrep "\<s" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
以上就是正则表达式的一些基本用法,要熟练的使用这则表达式去查找本文文件,同时也要分清什么时候用到grep,什么时候用到egrep,也要多多去练习,才能彻底掌握grep。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux 三剑客 表达式