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. dubbo管理控制台搭建

    1. 从网上下载dubbo管理控制台:dubbo-admin-2.5.4.war 2. 下载tomcat7,解压缩 3. 将tomcat7 webapps/ROOT的文件全部删除,然后把dubbo-a ...

  2. Vue--关于点击当前路由,视图无法更新的解决方案

    转自:https://juejin.im/post/593121aa0ce4630057f70d35 问题的根源: 用户点击当前高亮的路由并不会刷新view,因为vue-router会拦截你的路由,它 ...

  3. Linux C ftruncate 函数清空文件注意事项(要使用 lseek 重置偏移量)

    转载:http://blog.csdn.net/a_ran/article/details/43562429 int truncate(const char *path, off_t length); ...

  4. adobe flash player不是最新版本

    adobe flash player不是最新版本

  5. BZOJ1652 [Usaco2006 Feb]Treats for the Cows

    蒟蒻许久没做题了,然后连动规方程都写不出了. 参照iwtwiioi大神,这样表示区间貌似更方便. 令f[i, j]表示i到j还没卖出去,则 f[i, j] = max(f[i + 1, j] + v[ ...

  6. 15 int *ptr= (int *)(&a+1)跨了整个数组长度

    分析以下程序,输出结果 2,5 #include<stdio.h> int main() { ]={,,,,}; ); printf(),*(ptr-)); ; } 分析: a 代表的是i ...

  7. https://blog.csdn.net/u012150179/article/details/38091411

    一 scrapy-redis实现分布式爬取分析 所谓的scrapy-redis实际上就是scrapy+redis其中对redis的操作采用redis-py客户端.这里的redis的作用以及在scrap ...

  8. LINUX文件格式化读写(文件指针,缓冲)

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  9. Python API快餐教程(1) - 字符串查找API

    字符串处理相关API 字符串是7种序列类型中的一种. 除了序列的操作函数,比如len()来求字符串长度之外,Python还为字符串提供丰富到可以写个编辑器的API. 查找类API 首先,下面的查找AP ...

  10. iOS-----使用NSURLConnection

    使用NSURLConnection 如果只是为了读取HTTP等服务器数据,或向服务器提交数据,iOS还提供了NSURLConnection类,NSURLConnection使用NSURLRequest ...