正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理。本文以grep为例来讲解正则表达式。

grep命令

功能:输入文件的每一行中查找字符串。

基本用法:

grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名
参数说明:
-a:将二进制文档以文本方式处理
-c:显示匹配次数
-i:忽略大小写差异
-n:在行首显示行号
-A:After的意思,显示匹配字符串后n行的数据
-B:before的意思,显示匹配字符串前n行的数据
-v:显示没有匹配行-A:After的意思,显示匹配部分之后n行-B:before的意思,显示匹配部分之前n行
--color:以特定颜色高亮显示匹配关键字

‘搜寻字符串’是正则表达式,注意为了避免shell的元字符对正则表达式的影响,请用单引号(’’)括起来,千万不要用双引号括起来("”)或者不括起来。

正则表达式分为基本正则表达式和扩展正则表达式。下面分别简单总结一下。

基本正则表达式

正则表达式学习,主要是对正则表达式元数据的学习。正则表达式本身没有什么高深的东西,本文仅仅对基本正则表达式的元数据进行一下总结:

  \s  \b \S都是支持的,以及如下:

元数据

意义和范例

^word 搜寻以word开头的行。

例如:搜寻以#开头的脚本注释行

grep –n ‘^#’ regular.txt

word$ 搜寻以word结束的行

例如,搜寻以‘.’结束的行

grep –n ‘.$’ regular.txt

. 匹配任意一个字符。

例如:grep –n ‘e.e’ regular.txt

匹配e和e之间有任意一个字符,可以匹配eee,eae,eve,但是不匹配ee。

\ 转义字符。

例如:搜寻’,’是一个特殊字符,在正则表达式中有特殊含义。必须要先转义。

grep –n ‘\” regular.txt

* 前面的字符重复0到多次。

例如匹配gle,gogle,google,gooogle等等

grep –n ‘go*gle’ regular.txt

[list] 匹配一系列字符中的一个。

例如:匹配gl,gf。

grep –n ‘g[lf]’ regular.txt

[n1-n2] 匹配一个字符范围中的一个字符。

例如:匹配数字字符

grep –n ‘[0-9]’ regular.txt

[^list] 匹配字符集以外的字符

例如:grep –n ‘[^o]‘ regular.txt

匹配非o字符

\{n1,n2\} 前面的字符重复n1,n2次

例如:匹配google,gooogle。

grep –n ‘go\{2,3\}gle’ regular.txt

\<word 单词是的开头。

例如:匹配以g开头的单词

grep –n ‘\<g’ regular.txt

word\> 匹配单词结尾

例如:匹配以tion结尾的单词

grep –n ‘tion\>’ regular.txt

扩展正则表达式

grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。

扩展正则表达式就是在基本正则表达式的基础上,增加了一些元数据。

元数据

意义和范例

+ 重复前面字符1到多次。

例如:匹配god,good,goood等等字符串。

grep –nE go+d’ regular.txt

? 匹配0或1次前面的字符

例如,匹配gd,god

grep –nE ‘go?d’ regular.txt

| 或(or)的方式匹配多个字串  
例如:grep –nE ‘god|good’ regular.txt

匹配god或者good。

() 匹配整个括号内的字符串,原来都是匹配单个字符

例如:搜寻good或者glad

grep –nE ‘g(oo|la)’ regular.txt

() 前面的字符重复0到多次。

例如匹配gle,gogle,google,gooogle等等

grep –nE ‘go*gle’ regular.txt

POSIX字符类

[:alnum:]

文字数字字符

[:alpha:]

非数字字符字符

[:digit:]

数字字符

[:graph:]

非空字符(非空格、控制字符)

[:lower:]

小写字符

[:cntrl:]

控制字符

[:print:]

非空字符(包括空格)

[:punct:]

标点符号

[:space:]

所有空白字符(新行,空格,制表符)

[:upper:]

大写字符

[:xdigit:]

十六进制字符

实例

1、显示/proc/meminfo文件中以大小写s开头的行;
        grep [Ss]  /proc/meminfo
    2、取出默认shell为非bash的用户; 
      grep -v 'bash' /etc/passwd
    3、取出默认shell为bash的且其ID号最大的用户;
        grep 'bash' /etc/passwd | cut -d: -f3 |sort |tail -1
    4、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
       grep '^#[[:space:]]\{1,\}[[:space:]]\{1,\}'  /etc/rc.d/rc.sysinit
    5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
            grep '^[[:space:]]\{1,}' /boot/grub/grub.conf
    6、找出/etc/passwd文件中一位数或两位数;
            grep '\<[0-9]\{1,2\}\>' /etc/passwd
    7、找出ifconfig命令结果中的1到255之间的整数;
                ifconfig eth0|egrep '2[0-5][0-5]|1[0-9][0-9]|[1-9][0-9]|[0-9]'
    8、查看当前系统上root用户的所有信息;
                  grep '\<root\>' /etc/passwd
    9、添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户;

grep '^\([[:alpha:]]\{1\}\.*\1$'  /etc/passwd

10、找出netstat -tan命令执行的结果中以“LISTEN”或“ESTABLISHED”结尾的行;

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

  1. Linux grep与正则表达式

    grep命令         格式:grep [-acinv] [--color=auto] '查找字符串' filename -a 将binary文件以text文件的 -c 计算找到 ‘查找字符串’ ...

  2. grep和正则表达式

    正则表达式示例表字 符 意 义 示 例* 任意长度的字符串. a* 表示: 空字符串.aaaa.a…? 长度为0或者1的字符串. a? 表示: 空字符串和a.+ 长度为一个或者多个的字符串. a+表示 ...

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

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

  4. 第5天(半天)【shell编程初步、grep及正则表达式】

    第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...

  5. [Linux 006]——grep和正则表达式

    在使用系统时,我们或多或少的有一些搜索.查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行.grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配, ...

  6. grep与正则表达式使用

    grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.通常grep有三种版本grep.egrep(等同于grep -E)和fgrep.egrep为扩展的g ...

  7. grep用法详解:grep与正则表达式【转】

    转自:http://blog.csdn.net/hellochenlian/article/details/34088179 grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配 ...

  8. linux初级学习笔记十:linux grep及正则表达式!(视频序号:04_4)

    本节学习的命令:grep 本节学习的技能: grep对文本的匹配 正则表达式的使用 知识点十:grep及正则表达式(4_4) grep,egrep,fgrep: grep: 根据模式搜索文本,并将符合 ...

  9. grep使用正则表达式搜索IP地址

    递归搜索当前目录及其子目录.子目录的子目录……所包含文件是否包含IP地址 grep -r "[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit: ...

  10. Linux文本处理三剑客之grep及正则表达式详解

    Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...

随机推荐

  1. 彻底弄懂css中单位px和em,rem的区别 转的自己看

    国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢? PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的 ...

  2. HOG参数简介及Hog特征维数的计算(转)

    HOG构造函数 CV_WRAP HOGDescriptor() :winSize(64,128), blockSize(16,16), blockStride(8,8),      cellSize( ...

  3. C++ Primer : 第十二章 : 文本查询程序

    C++ Primer书上这个例子讲的很不错,写写帮助自己理解标准库和智能指针. .h 文件内容 #include <fstream> #include <iostream> # ...

  4. html5的改进与沿革

    HTML5提供了一些新的元素和属性,例如<nav>(网站导航块)和<footer>.这种标签将有利于搜索引擎的索引整理,同时更好的帮助小屏幕装置和视障人士使用,除此之外,还为其 ...

  5. HTML ---滚动条样式代码及<marquee>标签的用法;

    html中滚动条属性设置 scrollbar属性.样式详解 1.overflow内容溢出时的设置(设定被设定对象是否显示滚动条)    overflow-x水平方向内容溢出时的设置    overfl ...

  6. 工作中遇到的问题--使用DTO减少数据字段

    Location中包含如下字段以及AMfgObject中关于创建信息的字段,然而有时使用并不需要传输那么多数据,则对其中字段进行过滤. @Entity@Table(name = "LOCAT ...

  7. scala言语基础学习十一

    隐式转换 使用隐式转换加强现有的类型的功能-类似于设计模式的装饰模式

  8. 服务器启用 FTP

    通常使用 vsftpd 作为FTP服务器. 安装 vsftpd: 1.以管理员(root)身份执行以下命令 yum install vsftpd 2.设置开机启动 vsftpd ftp 服务 chkc ...

  9. 黑马程序员——JAVA基础之set集合

    ------- android培训.java培训.期待与您交流! ---------- Set:       元素是无序(存入和取出的顺序不一定一致),元素不可以重复.    Set接口中常用的类: ...

  10. c++文件操作相关

    file operation API functions HANDLE CreateFile(lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttr ...