Linux文本处理工具之grep

简介

    grep:Global search regular expression and print out the line.

    grep是一种文本搜索处理工具,根据用户指定的文本模式或搜索条件对目标文件进行逐行搜索,并显示能匹配到的行。

    语法格式:grep [options]… 'PATTERN' FILE…

              '':弱引用,

              "":强引用,如PATTERN中有变量则需要强引用

              PATTERN:模式匹配,可以使用正则表达式

    正则表达式:是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能

    分类:

        基本正则表达式:grep   

        扩展正则表达式:egrep,grep -E

        不使用正则表达式:fgrep,即用户搜索条件或文本模式表示其字面意义

 1、字符匹配

.:匹配任意单个字符,包括空字符
*:任意长度,它前面的字符可以出现任意次
.*:字符组合,表示任意长度的任意字符
a|b:多条件匹配,a或者b  #扩展正则表达式可用
[]:匹配指定范围内的任意单个字符
    [0-9],[[:digit:]]    #表示任意数字
    [a-z],[[:lower:]]    #表示任意小写字母
    [A-Z],[[:upper:]]    #表示任意大写字母
    [[:space:]]          #表示空格
    [[:punct:]]          #表示特殊符号
    [a-zA-Z],[[:alpha:]]             #表示任意字母
    [0-9a-zA-Z],[[:alnum:]]          #表示任意字母和数字
    [[:blank:]]          #匹配一个空格或制表符(TAB)
    [[:graph:]]          #非空字符
    [[:cntrl:]]          #控制字符
    [[:xdigit:]]         #十六进制数字   
    [^]                  #条件取反

 2、次数匹配元字符

#"\"符号为转义符,扩展正则表达式不需要转义
\?:0次或1次,它前面的字符是可有可无的       #转义前 ?
\{m\}:精确匹配m次,它前面的字符要出现m次    #转义前{m}
\{m,n\}:至少m次,至多n次                    #转义前{m,n}
\{m,\}:至少m次                              #转义前{m,}
\+:至少1次                                  #转义前 +
\{0,n\}:至多n次                             #转义前{0,n}

 3、位置锚定

^:行首锚定,写在模式最左侧
$:行尾锚定,写在模式最右侧
^$:空白行
\<:词首,写在字符左侧
\>:词尾,写在字符右侧
\<char\>:锚定字符串
\b:字符串锚定,不区分词首词尾

 4、分组和引用

\(\):分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用。
():扩展正则表达式不需要转义,直接使用()即可
    引用:\(ab\).*\1,即引用前一个括号匹配到的内容
    格式:\(char\)\#,\#表示引用前面第#个括号匹配的内容

 5、命令选项

-v:反向选取
-o:仅显示匹配的字串,而非字串所在的行
-i:igonore-case,忽略字符大小写
-E:支持使用扩展正则表达式
--color:匹配字串显示颜色,颜色可在本地变量中定义
    vim ~/.bashrc
    export GREP_OPTIONS='--color={never|always|auto}' GREP_COLOR=a;b'
        默认选项为never,而always在任何情况下都会有颜色标记,auto在终端输出时才加颜色
    #a可以选择[0-8]
    0 关闭所有属性
    1 设置高亮度
    4 下划线
    5 闪烁
    7 反显
    8 消隐
    #b可以选择:[30-37]
    30 black
    31 red
    32 green
    33 yellow
    34 blue
    35 purple
    36 cyan
    37 white
    30 — 37 设置前景色
-m #:仅显示匹配行的前#行
-n:在匹配行前打印行号
-c:仅显示匹配行计数
-w:仅显示匹配单词的行
-f:从文件读取模式,一行一个模式匹配
-A #:显示上下文,#表示数字,显示下面#行
-B #:显示上面#行
-C #:显示上下#行

    6、例子

1)找出/etc/passwd文件中的一位数或两位数;
     # grep -E '\<[0-9]{1,2}\>' /etc/passwd   扩展正则
     # grep "\<[0-9]\{1,2\}\>" /etc/passwd    基本正则
2)显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
     # grep -E '^[[:space:]]{1,}' /boot/grub/grub.conf
     # grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf
3)找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行;
     # grep -o -E "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions
4)显示当前系统上root、fedora或user1用户的默认shell;
     # grep -E "^(root|fedora|user1):" /etc/passwd | cut -d: -f7
5)统计/etc/passwd包含root的行数
     # grep -w -c 'root' /etc/passwd
6)输出/etc/issue文件的空行行号
     # grep -n "^$" /etc/issue

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

(0)
秦
上一篇 2015-05-12 23:01
下一篇 2015-05-13 18:37

相关推荐

  • Ansible安装及简单使用

    简介: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包…

    Linux干货 2016-08-07
  • Linux软件包管理(YUM)及编译安装

    YUM 一、yum安装使用: 1、Yum:rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包,up2date的替代工具 2、yum repository:yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下) 3、yum客户端配置文件: /etc/yum.conf:为所有仓库提供公共配置 /et…

    Linux干货 2016-08-26
  • 通络通信

    网络详解: 网络的osi层次结构: 物理层: 以太网规定,连入网络的所有设备,都必须具有”网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。 网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。 每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。 前6个十六进制数是厂商编号,后6个是该厂商…

    Linux干货 2016-09-02
  • 用户和组相关的配置文件总结

    前言: 在用户管理,组管理过程中,最基本的四个文件就是/etc下面的passwd,shadow,group,gshadow。他们记录了与用户和组相关的信息。是学习和深入了解用户,组的基本。 除了这些基本的配置文件 还有与初始化相关的配置文件。定义用户添加时初始状态的配置文件/etc/default/useradd。 以及用户家目录的内容文件参考目录/etc/…

    Linux干货 2016-10-24
  • N25-第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其他用户均没有任何访问权限。 1.  [root@jizo etc]# ls –d skel 2.  skel 3.  [root@jizo etc]# cd /home 4.  [root@jizo …

    Linux干货 2016-12-26
  • ntp时间服务器搭建实例

    ntp时间服务器采用stratum分级架构来处理时间同步;举例说明:你搭建了一台ntp服务器,然后同步的server为stratum-1,你的ntp则为stratum-2,你的下级ntp则为tratum-3。依此类推,最多为15层。 1.ntp server安装: [root@localhost ~]# yum -y …

    Linux干货 2015-11-10