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 :忽略字符大小写
\+:匹配前面的字符至少1次
^:锚定行首 $:锚定行尾 \<, \b:锚定词首 \>, \b:锚定词尾行首行尾的锚定与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 /bootgrep -o:仅显示匹配到的文本的自身
~]# grep -o'^UUID' /tmp/fstab UUID UUIDgrep -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 socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍