Linux上文本处理三剑客

  • grep :文本过滤( 模式:pattern) 工具
  • grep, egrep, fgrep (不支持正则表达式搜索,但搜索纯文本的数据最快)
  • sed :stream editor ,文本编辑工具
  • awk :Linux上实际是gawk(GUN awk) ,文本报告生成器

正则表达式:

  • 由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
  • 支持正则表达式的程序:grep, vim, less,nginx等

正则表达式分两类:

  • 基本正则表达式:BRE
grep ,egrep -G   
  • 扩展正则表达式:ERE
grep -E, egrep  

  

正则表达式引擎:

  • 采用不同算法,检查处理正则表达式的软件模块
  • PCRE(Perl Compatible Regular Expressions)
  • 元字符分类:字符匹配、匹配次数、位置锚定、分组

grep

grep: Global search REgular expression and Print out the line.

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式字符及文本字符所编写的过滤条件

  

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]  
--color=auto: 对匹配到的文本着色显示;
-v: 显示不能够被pattern匹配到的行;
-i: 忽略字符大小写
-n:显示匹配的行号
-c: 统计匹配的行数,而不显示匹配到的内容
-o: 仅显示匹配到的字符串;
-q: 静默模式,不输出任何信息
-A #:after,显示匹配的行及其后#行
-B #: before,显示匹配的行及其前#行
-C #:context,显示匹配的行及其前后各#行
-e:实现多个选项间的逻辑or关系

  

grep –e 'cat' -e 'dog' file  
-E:使用ERE
   扩展的正则表达式  

基本正则表达式元字符:

字符匹配:

.: 匹配任意单个字符;
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]   

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式:尽可能长的匹配

* :匹配前面的字符任意次,包括0次
.* :任意长度的任意字符
\? :匹配其前面的字符0或1次
\+ :匹配其前面的字符至少1次,但不需要紧随在第一次后面
\{m\} :匹配前面的字符m次
\{m,n\} :匹配前面的字符至少m次,至多n次
\{,n\} :匹配前面的字符至多n次
<=n次
\{m,\} :匹配前面的字符至少m次
>=m次  

位置锚定:定位出现的位置

^ :行首锚定,用于模式的最左侧
$ :行尾锚定,用于模式的最右侧
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行或包含tab字符的行
\< 或 \b :词首锚定,用于单词模式的左侧
\> 或 \b :词尾锚定;用于单词模式的右侧
注意:在grep中,字母和数字的组合也被视为单词
\<PATTERN\>:锚定以PATTERN表达式做为单词的行  

 

分组及引用

\(\):将1个或多个字符捆绑在一起作为一个整体进行处理
\(xy\)*ab:xy作为一个整体出现0此或多次
   注意:分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部变量中,这些变量为:
    \1:模式从左侧起,第一个左括号以及与其匹配的右括号之间的内容
    \2:模式从左侧起,第二个左括号以及与其匹配的右括号之间的内容
    \3:
    ……
    后向引用:引用前面的分组括号中的模式所匹配的字符,且引用中的数据和分组模式匹配到的数据是一样  

练习:

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

# grep -v "/bin/bash$" /etc/passwd

2 、显示用户rpc 默认的shell 程序

# grep "^rpc\>" /etc/passwd | cut -d: -f7

3 、找出/etc/passwd 中的两位或三位数

# grep -E "\<[0-9]{2,3}\>" /etc/passwd

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

# netstat -tan | grep "\<LISTEN[[:space:]]*$"

egrep及扩展的正则表达式

egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
  选项:

    -i,-o,-v,q,-A,-B,-C
    -G:支持基本的正则表达式

扩展正则表达式元字符:

字符匹配:

.: 匹配任意单个字符;
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]   

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式,尽可能长的匹配

* :匹配前面的字符任意次,包括0次
.* :任意长度的任意字符
? :匹配其前面的字符0或1次
+ :匹配其前面的字符至少1次
{m} :匹配前面的字符m次
{m,n} :匹配前面的字符至少m次,至多n次
{,n} :匹配前面的字符至多n次
<=n次
{m,} :匹配前面的字符至少m次
>=m次   

位置锚定:定位出现的位置

^ :行首锚定
$ :行尾锚定
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行或包含tab字符的行
\< 或 \b :词首锚定
\> 或 \b :词尾锚定
注意:在grep中,字母和数字的组合也被视为单词 \<PATTERN\>:锚定以PATTERN表达式做为单词的行   

分组及引用

():括号内模式会被记录于正则表达式引擎中:
后向引用:\1,\2,\3......
或者
a|b:a或者b
  eg:C|cat :表示C或者cat
    (C|c)at :表示Cat或者cat  

练习:

1 、显示当前系统上,root,gao和user1用户的相关信息

# grep -E "\<(root|gao|uer1)\>" /etc/passwd

2 、统计以root 身份登录的每个远程主机IP

# who | grep -E "^root\>" | wc -l

3 、使用egrep 取出/etc/rc.d/init.d/functions

# echo "/etc/rc.d/init.d/functions" | grep -oE "[^/]+/?$"

grep和egrep正则表达式的更多相关文章

  1. Linux正则表达式grep与egrep

    grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...

  2. Linux三剑客之grep 与 egrep

    grep: Linux上文本处理三剑客 grep:文本过滤(模式:pattern)工具; *(grep, egrep, fgrep) sed:stream editor,文本编辑工具: awk:Lin ...

  3. grep与正则表达式,grep、egrep和fgrep

    grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串. ...

  4. 快速掌握grep命令及正则表达式

    Linux系统自带了支持拓展正则表达式的 GNU 版本 grep 工具,所有的Linux发行版中均默认安装grep ,grep 命令被用来检索一台服务器或工作站上任何位置的文本信息,如何在 Linux ...

  5. linux中grep和egrep的用法

    1. grep简介 grep (global search regular expression_r(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大 ...

  6. grep、egrep、fgrep的用法与特性详解

    [转载自]http://tanxw.blog.51cto.com/4309543/1361993 开篇        学习Linux也有一段时间了,对Linux多少也算是有点了解了,越是了解也就越对这 ...

  7. 07 grep命令与正则表达式

    grep命令 首先我们知道grep命令是用来做文件内容过滤的!如果你要在文件中查找一些对应的内容,我们如何来过滤找到其中我们需要符合条件的内容呢?grep命令结合正则表达式就可以实现: grep.eg ...

  8. grep与egrep的区别

    grep与egrep的区别: 在linux系统环境下,我们通常使用grep命令来过滤出需要的行而egrep确很少使用,他们的区别其实很简单,grep默认不支持正则表达式,egrep默认支持正则表达式, ...

  9. centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~/.bash_profile 2015-4-10 第十三节课

    centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符  通配符 特殊符号. * + ? 总结  问加星 cat -n  nl  输出文件内容并加上行号 alias放~ ...

随机推荐

  1. DB2开发系列之二——SQL过程

    1.SQL 过程的结构 1)SQL过程的结构 CREATE PROCEDURE proc_name   IN, OUT, INOUT parameters   optional clauses   S ...

  2. C语言-简单选择排序与直接插入排序的实现

    /* Name: selectSort and insertSort Copyright: nyist Author: 润青 Date: 01/10/18 19:30 Description: 实现了 ...

  3. Python的数据类型3元组,集合和字典

    首先要讲到的就是元组 元组其实拥有列表的一些特性,可以存储不同类型的值,但在某些方面元组又比不上列表 定义一个元组,你可以不用加‘ [ ] ’,你只需用逗号隔开即可 例如 1 2 3 4 5 6 7 ...

  4. POJ 1847 dijstra算法

    POJ 无限循环CE中.感觉是读题难.然后就可以建图上模板了. 附个人代码: #include<stdio.h>#include<string.h>#include<io ...

  5. 《Python》 内置函数补充、匿名函数、递归初识

    一.内置函数补充: 1.数据结构相关(24): 列表和元祖(2):list.tuple list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素). tuple:将一个可迭代对象转 ...

  6. 基于资源名的MVC权限控制

    在程序复杂程度不断上升的过程中,无可避免需要触碰到权限控制,而权限控制又与业务逻辑紧紧相关,市场上出现了大量的权限控制产品,而程序的开发,讲究去繁化简的抽象,在我的开发过程中,逐渐发现程序的权限控制核 ...

  7. Nexus设备渗透测试平台 – Kali Linux NetHunter

    NetHunter是一个基于Kali Linux为Nexus设备构建的Android渗透测试平台,其中包括一些特殊和独特的功能.NetHunter支持无线802.11注入,一键MANA AP搭建,HI ...

  8. 怎么使用C++标准库来实现二维数组

    在编程里,像界面布局是二维的,那么常常使用二维数组来表示界面的元素,那么就需要使用二维的数组,在现在C++肯定是以标准库为基础了,不再使用C的二维数组,那么怎么样做呢?下面就使用vector来实现二维 ...

  9. 算法训练 P1102

      算法训练 P1102   时间限制:1.0s   内存限制:256.0MB      定义一个学生结构体类型student,包括4个字段,姓名.性别.年龄和成绩.然后在主函数中定义一个结构体数组( ...

  10. magento关联产品

    <?php $related= $_product->getRelatedProducts(); foreach($related as $_item): $_item = $_item- ...