grep &&正则表达式&&通配,元字,转义符

grep 基于正则表达式的查询

1正则表达式: 正则表达式是通过使用特殊的字符所编写的模式,一些字符不表示字符的表面意思,具有控制和通配的功能.

使用正则表达式进行匹配具有两种方法:一是通过使用特殊的元字符进行字符匹配;二是使用次数匹配。

一, 正则表达式的特殊字符(元字符) : 

#建议再温习一下之前所学的统通配符,对比一下,防止混淆。

(1)元字符(正则表达式:字符匹配) :元字符不表示本身的含义,用于额外功能的描述。

.  :匹配任意单个字符       #注意是单个字符

[] :指定范围内的任意单个字符。 #注意是单个字符

[^] :匹配在指定范围外的任意单个字符。 ^ 托字符在括号之外的含义是锚定行首。

[] 中可以使用这样的方式(这个和通配符的含义是一样的):

[:digit:] :指所有的数字

[:lowwer:]  :指所有的小写字母

[:upper:] :指所有的大写字母

[:alpha:] :指所有的字母(不区分大小写)

[:alnum:] :指所有的数字和字母

[:punct:] :指所有的标点符号

[:space:] :指所有的空白字符(tab键还有空格都属于space)

次数匹配:用于在指定次数的字符后面,用于指定前面的字符要出现的次数

* :匹配前面的字符任意次 ;注意的是默认情况下,正则表达式是在贪婪模式下,就是尽可能的多进行匹配。

          元字符1.png  

        位置匹配:对特定位置进行定位

                ^ :行首锚定 ,用于模式的最前面

                $ :行尾锚定,用于模式的最后面

                ^PATTERN$ :用于匹配整行内容。

                \<或者\b:用于词首锚定 #注意是整个词的锚定

                \>或者\b:用于词尾锚定

(2) 通配符(作为对比和温习)

* :匹配0个或者多个字符

:匹配任何单个字符

~ :当前用户的家目录

~+ :当前工作目录

~- :前一个工作目录

[0-9] :匹配一个数字范围

[a-z] :匹配大写和小写字母 比如[a-c] a , A ,b ,B ,c 

[A-Z] :匹配大写字母

[wxc] :匹配列表中任何一个字符

[^wxc] :匹配列表之外任何一个字符

[:digit:] :指所有的数字

[:lowwer:]  :指所有的小写字母

[:upper:] :指所有的大写字母

[:alpha:] :指所有的字母(不区分大小写)

[:alnum:] :指所有的数字和字母

[:punct:] :指所有的标点符号

[:space:] :指所有的空白字符(tab键还有空格都属于space)

(3)转义符

有时候,我们想让 通配符,或者元字符 变成普通字符,不需要使用它。那么这里我们就需要用到转义符了。

shell提供转义符有三种。

‘’(单引号) 又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。

“”(双引号) 又叫软转义,其内部只允许出现特定的shell 元字符:$用于参数代换 `用于命令代替

\(反斜杠)  又叫转义,去除其后紧跟的元字符或通配符的特殊意义。

!!!文本和文件是不支持正则表达式!!!

grep 是一种文本的过滤器,它是根据指定的模式(就是所谓的正则表达式限定)进行对文本逐行的进行查询,而后显示出匹配的行。

格式:grep [OPTION] PATTERN [FILE]

–COLOR 高亮显示匹配到的字符。

-v 显示不能被pattern匹配到的行,相当于取反。

-i 忽略字符的大小写

-o 只显示被匹配到的字符串

-q 静默模式,不输出任何信息 #可以使用echo $? 查看上条命令的执行是否成功。

-n 显示匹配到的内容在第几行

-A :显示匹配内容的后面#行

-B 显示匹配内容的前面的几行,如果匹配到的为第一行,则前面的为空。

-C 相当于-AB,显示匹配内容的前后#行

-E 相当与egrep,支持扩展正则表达式

grep选项.png


附 :cut ,head ,tail的用法

        

之所以附这三个命令的用法是因为这三个命令和grep时常一起使用,用于对grep文本过滤的后的取舍。

    cut :是文本切割的命令,用某种分隔符进行切割,按照列进行取其内容。 # 某种分隔符 :比如说 /etc/passwd 下的文件 ,user:UID:GID:…

        这样就可以使用: 作为分隔符 ,方便取内容,分隔符不是固定的,是按个人需求进行设定。

        -d   : 后面加上设定的分隔符

        -f :以分隔符分出的列进行划分,在f后跟数字代表取得第几列。

        比如:取出用户的UID号 :  # 以:为分隔符,UID处于第三列,使用f3。

        cut1.png

    head 取grep取出的内容的开头几行 ,tail取得是内容的后面几行,在命令后面跟上行数就可以,通常使用管道。

    -c # :指定获取前#字节    # 取字节可以把需要取得内容使用文本编译器(nano,vi)等显示,可以查看其字节。

    -n # :指定获取前#行

    -# :指定行数

    head,tail2.png

        


原创文章,作者:zhong,如若转载,请注明出处:http://www.178linux.com/29472

(0)
上一篇 2016-08-05 16:09
下一篇 2016-08-05 16:09

相关推荐

  • Http协议三次握手过程

    Http协议三次握手过程   TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧…

    Linux干货 2016-06-22
  • 特殊权限之SUID、SGID、STICKY

    特殊权限        在系统中,难免有一些比较特殊的用户或文件目录,但是普通的权限有不能解决我们的需求,于是就有特殊权限帮我们解决这个问题 特殊权限有三个:SUID、SGID、STICKY      首先,先说说安全上下文: 进程以某用户的身份运行,那么进程将会以此用户身份去完成所有操作…

    Linux干货 2016-08-05
  • 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)

    1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力。当对象们连接在一起时,它们就可以相互提供服务和信息。 通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信。但是出于各种原因,你也许并不愿意因为代码环境的改变而对代码做大的修改。也许,你只想根据你的具体应用环境而改进通信代码。或者,你只想简单的重新构造通信代码来避免类和类…

    Linux干货 2015-07-24
  • 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@UncleZ ~]# who | cut -d' ' -f1 | uniq -c 2、取出最后登录到当前系统的用户的相关信息。 [roo…

    Linux干货 2016-12-17
  • Linux基础知识之IO重定向

    该博文以CentOS6.8_x86_64系统为基础,Xshell 5远程连接CentOS系统,以root身份登录系统。  什么是I/O重定向?       所谓I/O重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块(codeblock)的输出,然后把捕捉到的输出,作为输入发送给…

    Linux干货 2016-07-26
  • Linux 进程及作业管理

    Linux 进程及作业管理 概述:      我们在实际的运维工作中经常要对服务器做各种监控,以了解其相关状态,比如,CPU利用率,磁盘空间利用率,等等,这就需要我们了解相关的数据并学会使用各种工具来分析数据。本章就将总结Linux系统中进程管理和作业管理的相关命令、参数和工具,包括:进程的相关定义、分类、状态以及进程查看和管理…

    Linux干货 2016-09-10