linux基础三剑客之grep

1、grep命令

基本介绍

  grep命令是文本本过滤工具,是基于一个模式匹配文件的每一行,grep分类:egrep个fgrep。

  grep英文名:Global  search  Regular  expression  and  Print  out  the  line

  grep命令的作用:文本所搜工具。根据用户指定的模式对目标文件逐行进行匹配检查,并且打印匹配的行

  模式:由正则表达式字符串及文本字符所编写的过滤条件

  正则表达式:英文名regular  expression,解释:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或者通配的功能

  正则表达式分类

    基本正则表达式:basic  regular  expression,简写BRE

    扩展正则表达式:extend regular  expression,简写ERE

    注意:grep默认支持的是基本正则表达式,但是grep命令可以是用选项-E来使用扩展正则表达式。egrep命令默认支持扩展正则表达式

  正则表达式引擎:检查一个模式是否匹配一段文本信息的程序,不同的编程语言使用的正则表达式引擎可能不同。引擎不同,检查字符匹配的算法不同。

  grep命令内部自带了正则表达式引擎来实现文本的检查

  基本语法

    grep [OPTIONS] PATTERN [FILE...]

     grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

      常用选项

        --color-auto:对匹配的文本内容进行着色

        -v:显示不能够被pattern匹配的行

        -i:忽略字符大小写

        -o:仅显示匹配到的字符串

        -q:对匹配或者不匹配的内容不输出任何信息,表示是静默模式

        -A  num:显示匹配到的行及在这之后多显示num行

        -B  num:显示匹配到的行及在这之前多显示num行

        -C  num:显示匹配到的行及在这之前和之后显示num行

        -E:使用扩展正则表达式

        -F:使用固定字符正则表达式

        -G:表示使用基本正则表达式

        -P:表示使用perl正则表达式

  基本正则表达式的元字符

    字符匹配元字符

      .:匹配任意单个字符

      []:匹配指定范围内的任意单个字符

      [^]:匹配范围之外的任意单个字符

      也支持字符集范围表示

      [:digit:]、[:alnum:]、[:alpha:]、[:lower:]、[:upper:]、[:punct:]

        使用案例

[root@oldboy ~]# grep "^[[:alpha:]].[[:alpha:]]$" a.txt

hal

kde

lvm

ntp

opt

pki

ppp

rpc

rpm

ssh

ssl

xdg

xml

yum

qwe

    匹配次数元字符

      基本介绍

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

    匹配次数元字符

      *:匹配前面的字符0次或者多次

      使用案例

[root@oldboy ~]# grep "x*y" grep.txt
xay
xbby 

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

.      *:匹配任意长度字符

      \+:匹配前面字符至少一次

      \{m\}:匹配前面的字符m次。

      \{m,n\}:匹配掐面字符至少m次,至多n次

        \{m,\}:匹配前面字符至少m次,多则不限

        \{0,n\}:匹配前面的字符至多n次

        使用注意

          为什么要使用\?-----因为?问号、加号+、大括号{}在linux中的bash解释器中有特殊意义,用反斜线在意就让他表示?问号原来的意义,即?问号在bash中表示任意字符,{}大括号在bash中表示内容展开,因此为了避免在bash中被解释,那么使用反斜线转义

    位置锚定元字符

      基本介绍

        要求指定的字符串模式必须出现在特定位置,那么得使用位置锚定元字符

      位置锚定元字符有

        ^:行首锚定,用于模式的最左侧

        $:行尾锚定,用于模式的最右侧

        ^PATTERN$:用于模式匹配整行

        ^$:匹配空行

          ^[[:space:]]*$:匹配整行为空格行或者空行

        \<或者\b:单词的词首锚定,用于单词模式的左侧

        \>或者\b:单词的词尾锚定,用于单词模式的右侧

        \<PATTERN\>:单词锚定,用于匹配整个单词

    分组

      \(\):用于将一个后者多个字符串捆绑在一起,当做一个整体进行处理,小括号在bash中也表示特殊符号

      后项引用:引用前面的分组括号中的模式所有匹配的字符(并不是引用匹配的模式,而是引用的匹配模式下的字符串)

      案例演示:

[root@oldboy ~]# grep "\(\<[[:alpha:]]\{1,3\}t\>\).*\1" /etc/passwd

root:x:::root:/root:/bin/bash

halt:x:::halt:/sbin:/sbin/halt

      使用注意:

        分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3...

        \1:表示第一次被分组小括号所匹配的内容

        \2:表示第二次被分组小括号所匹配的内容

        .....

        举例:

          \(ab\+\(xy\{2,\}\))*

            \1匹配上面的:ab\+\(xy\)

            \2匹配上面的:xy\{2,\}

        使用注意

          grep命令默认使用的是贪婪模式匹配,即最大匹配。

      为什么要使用位置锚定符?

        grep正则匹配默认是每一行按照正则模式一个字符一个字符的匹配,那么有匹配的字符串可能出现在一行内容的任意位置,因此,如果我们有需求要匹配的字符串在指定的位置(比如:在行首、行尾、词首、词尾),那么就得使用位置锚定元字符

      单词:在linux正则表达式中表示由特殊符号分割的一个字符串,纯数字字符串也算一个单词(虽然在显示不算真正意义的单词)

    案例演示题库

      显示/proc/meminfo文件中以大小写a、b开头的行

[root@oldboy ~]# grep -i "^a" /proc/meminfo

Active:             kB

Active(anon):       kB

Active(file):       kB

AnonPages:          kB

AnonHugePages:          kB

[root@oldboy ~]# grep "^[aA].*" /proc/meminfo

Active:             kB

Active(anon):       kB

Active(file):       kB

AnonPages:          kB

AnonHugePages:          kB

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

[root@oldboy ~]# grep -v  "/bin/bash$"  /etc/passwd 

      显示/etc/passwd文件中GID最大的用户名

[root@oldboy ~]# sort -t: -k3 -n  /etc/passwd|tail -n 

www:x::::/home/www2:/bin/bash

[root@oldboy ~]# sort -t: -k3 -n  /etc/passwd|tail -n |cut -d: -f1

www

      显示/etc/passwd的oldboy用户是否存在,如果存在显示他的默认shell

[root@oldboy ~]# grep "^\<oldboy\>" /etc/passwd

oldboy:x:::lan:/home/oldboy:/bin/csh

[root@oldboy ~]# grep "^\<root\>" /etc/passwd && grep "^\<root\>" /etc/passwd|cut -d: -f7

root:x:::root:/root:/bin/bash

/bin/bash 

      显示/etc/passwd文件中UID是三位数的用户名

[root@oldboy ~]# grep "\<[[:digit:]]\{3\}\>" /etc/passwd

[root@oldboy ~]# grep "\<[[:digit:]]\{3\}\>" /etc/passwd|cut -d: -f1

      显示netstat  -tan中出现State是LISTEN的行

[root@oldboy ~]# netstat -tan|grep "LISTEN[[:space:]]*"

tcp            0.0.0.0:           0.0.0.0:*                   LISTEN      

tcp               127.0.0.1:     0.0.0.0:*                   LISTEN      

tcp               127.0.0.1:      0.0.0.0:*                   LISTEN      

tcp               :::           :::*                        LISTEN      

tcp               :::            :::*                      LISTEN      

      显示/etc/passwd文件中用户名与默认shell名相同的行

[root@oldboy ~]# grep "\(\<[[:alnum:]]\+\>\).*\1$" /etc/passwd

sync:x:::sync:/sbin:/bin/sync

shutdown:x:::shutdown:/sbin:/sbin/shutdown

halt:x:::halt:/sbin:/sbin/halt

bash:x::::/home/bash:/bin/bash

2、egrep命令

基本介绍

  扩展正则表达式

    egrep = egrep  -E

基本语法

   grep [OPTIONS] PATTERN [FILE...]

  grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

  扩展正则表达式的元字符

    字符匹配

      .:匹配任意一个字符

      []:匹配范围内的字符

      [^]:匹配范围外的字符

    次数匹配

      *:匹配0次或者多次

      ?:匹配0次或者1次

      +:匹配1次或者多次

      {m}:匹配m次

      {m,n}:匹配至少m次,至多n次

    锚定字符

      ^:锚定行首

      $:锚定行尾

      \<:锚定词首

      \>:锚定词尾

    分组

      ()

      后项引用变量\1,\2,\3....

    或者

      a|b:支持二选一(扩展正则表达式比基本正则表达式元字符多了二选一)

  练习问题

    显示当前系统能够root、centOS或者oldboy用户的默认shell和UID

[root@oldboy ~]# grep -E "^(root|centos|oldboy)\>" /etc/passwd

root:x:::root:/root:/bin/bash

oldboy:x:::lan:/home/oldboy:/bin/csh

    找出/etc/rc.d/init.d/functions文件中,某单词跟一个小括号的行

[root@oldboy~]#egrep "^\<[_[:alpha:]]+\>[[:space:]]*\(\)" /etc/rc.d/init.d/functions

    使用echo命令输出一个命令,使用egrep取出路径的基名(基名:整个路径的最后一个文件或者目录)

[root@oldboy ~]# echo "/etc/fstab" |grep -E -o "[^/]+\/?\>$"

fstab

    找出ifconfig命令结果中的IP地址

[root@oldboy ~]# ifconfig|grep -E -o "(\<[[:digit:]]+\>\.?){3}\.?[[:digit:]]+"

192.168.173.140

192.168.173.255

255.255.255.0

127.0.0.1

255.0..

找出ifconfig命令结果中的1-255的数值

[root@oldboy ~]# ifconfig | grep -E -o "\<[0-5]+\>"|sort -u -n

   使用注意

     如果是扩展正则表达式,那么它的匹配模式的扩展正则元字符有一些不用转义,比如:小括号,大括号,加号等,但是锚定词首和词尾都需要加转义字符

3、fgrep命令

基本介绍

  fgrep命令不支持正则表达式搜索,你搜索字符是什么,就按照你搜索的去匹配

基本语法

  grep  [OPTIONS]  [-f PATTERN]  [FILE...]

基本使用

[root@oldboy ~]# grep -F "a..t" fgrep.txt

a..t

[root@oldboy ~]# grep -F "^h" fgrep.txt

^h

linux三剑客之grep的更多相关文章

  1. (转)不看绝对后悔的Linux三剑客之grep实战精讲

    不看绝对后悔的Linux三剑客之grep实战精讲 原文:http://blog.51cto.com/hujiangtao/1923675 https://www.cnblogs.com/peida/a ...

  2. Linux 三剑客之grep

    目录 Linux 三剑客之grep 搭配命令-find 三剑客之grep: 正则表达式: Linux 三剑客之grep 搭配命令-find find命令是根据文件的名称或者属性查找文件,并不会显示文件 ...

  3. Linux三剑客之grep常用参数详细总结

    三剑客grep总结 grep  : Linux三剑客老三      过滤需要的内容 参数: grep一般常用参数: -a :在二进制文件中,以文本文件的方式搜索数据 -c :计算找到 ’ 搜索字符串 ...

  4. Linux三剑客老三---grep

    1.Linux三剑客老三 过滤需要的内容,例子:grep -v oldboy hello.txt grep一般常用参数: -a:在二进制文件中,以文本文件的方式搜索数据. -c:计算找到"搜 ...

  5. Linux三剑客之grep 与 egrep

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

  6. linux三剑客之一grep

    正则表达式(Regular Expression) 目录 起源 正则表达式是什么? 两类基本正则表达式 正则表达式元字符 Linux上文本三剑客 小试牛刀 总结 一.起源   正则表达式这个名词,相信 ...

  7. Linux三剑客:grep、awk、sed

    ---------------------------------------------------------------------------------------------------- ...

  8. Linux 三剑客之 grep 使用详解

    Linux 最重要的三个命令在业界被称为三剑客,它们是:awk.sed.grep.sed 已经在上篇中讲过,本文要讲的是 grep 命令. 我们在使用 Linux 系统中,grep 命令的使用尤为频繁 ...

  9. linux 三剑客命令(grep,sed ,awk)

    grep 命令 :强大的文本’搜索’工具    1.grep   -n   'word'  file_name 在file_name文件中找到word所在的所有行并显示.-n 为显示行号.     2 ...

随机推荐

  1. 在递归函数中使用JQuery.Deferred,异步请求中的同步执行...

    标题不知道怎么起合适,其实需求很简单: 黑色背景的容器在页面打开时是隐藏的,点击提交后显示. 然后开始执行递归方法,每次ajax请求完成时,更新容器内容. 在全部执行完成后输出“执行完成”. subm ...

  2. Forth 内部解释程序工作流程

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

  3. jenkins 关闭和重启的实现

    jerkins自带的重启手段重启过程缓慢,在jenkins的操作过程中可使用以下操作: 关闭Jenkins 只需要在访问jenkins服务器的网址url地址后加上exit.例如我jenkins的地址h ...

  4. [Oracle][DATAGUARD]关于REDO_TRANSPORT_USER参数

    大家可能已经知道,在Oracle的DATAGUARD(这里指的是PHYSICAL STANDBY)环境中,Primary端会把生成的REDO传到Standby端,然后由Standby端的MRP进程应用 ...

  5. 幽灵自建的html5 的模板文件!

    <!-- ,s555SB@@& :9H####@@@@@Xi 1@@@@@@@@@@@@@@8 ,8@@@@@@@@@B@@@@@@8 :B@@@@X3hi8Bs;B@@@@@Ah, , ...

  6. python学习笔记第一节

    一.HelloWorld #!/usr/bin/env python #-*- coding:utf-8 -*- print("HelloWorld!") 二.用户交互 #!/us ...

  7. Database First/Code First

  8. 简单的OO ALV小示例

    OO ALV即面向对象ALV,是在屏幕上显示的一种可以自定义大小的ALV.它区别普通ALV的优点是可以多个ALV出现在同一个屏幕,也可以同其他屏幕元素同时出现在同一个屏幕. 示例展示: 1. 进入实用 ...

  9. DevExpress v18.2新版亮点——Reporting篇(一)

    行业领先的.NET界面控件——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress Reporting v18.2 的新功能,新版3 ...

  10. Airbnb Javascript 代码规范重要点总结es6

    中文原地址 1.对所有的引用使用 const 而非 var.这能确保你无法对引用重复赋值. 当需要变动引用时,使用let. const和let都是块级作用域. 2.创建对象的方式: const ite ...