文本三剑客之grep

文本编辑三剑客之grep

目录

  • 一、正则表达式
  • 二、grep:文本过滤器

一、正则表达式

REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面上的意义,而表示控制或者通配的功能。
分类:

  • 基本正则表达式:BRE
  • 扩展正则表达式:ERE

元字符的分类:

  • 字符匹配
  • 匹配次数
  • 位置锚定
  • 分组

(1)基本正则表达式元字符

1>字符匹配

  • . :匹配任意单个字符
  • [ ]:匹配范围内的单个字符
  • [^]:匹配指定范围外的任意字符
  • \:转义符,是特殊字符表示成本身的意思,而不是正则表达式的意思
  • 特定字符:和中括号的字符集合一块使用,比如: [[:digit:]]=[0-9]
    文本三剑客之grep

2>匹配次数

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

  • *:匹配前面的字符任意次,包括0次。(贪婪模式:经可能长的匹配)
  • .*:任意长度的任意字符
  • \?:匹配前面的字符0或者1次(部分匹配就行,如a\?b,ab、aab、amnb都符合)
  • +:匹配前面的字符者少1次
  • {n}:匹配前面的字符n次
  • {m,n}:匹配前面的字符至少m次,至多n次
  • {,n}:匹配前面的字符至多n次
  • {n,}:匹配前面的字符至少n次

3>位置锚定

定位出现的位置

  • ^:行首锚定,用于模式最左侧
  • $: 行尾锚定,用于模式最右侧
  • ^pattern$:用于模式匹配整行

    • ^$:空白行
    • ^[[:space:]]$:空白行
  • \<或者\b:词首锚定,用于单词模式的左侧
  • \>或者\b:词尾锚定,用于单词模式右侧
  • \<pattern>:匹配整个单词

4>分组

分组: () 将 将 一个或多个字符捆绑在一起,当作一个整体进行处理,如:(root)+

  • 分组 括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …
  • \1 表示从左侧起第一 个左括号以及与之匹配右括号之间的模式所匹配到 的字符
  • 后向引用:引用前面的分组括号中的模式所 匹配字符,而非模式本身
  • 示例 :

    \(string1\+\(string2\)*\)
    \1  :string1\+\(string2\)*
    \2  :string2

(2)扩展正则表达式的元字符

用法

egrep = grep -E
egrep [OPTIONS] PATTERN [FILE…]

1>字符匹配

  • . 任意单个字符
  • [] 指定范围的字符
  • [^] 不在指定范围的字符

2>次数匹配

  • *:匹配前面字符任意次
  • ?:0 或1次
  • +:1 次或多次
  • {m} :匹配m次 次
  • {m,n} :至少m ,至多n次

3>位置锚定

  • ^ : 行首
  • $ : 行尾
  • \<, \b : 语首
  • \>, \b : 语尾

4>分组

  • ()
    后向引用:\1, \2, …

5>或者

  • | :或者
  • 实例:

    a|b: a 或b
      C|cat: C 或cat
      (C|c)at:Cat 或cat

二、grep

根据模式搜索文本,并将符合模式的文本显示出来。
pattern(模式):文本字符和正则表达式组合而成的匹配条件

用法

grep [OPTIONS] PATTERN [FILE…]

选项

  • -i : 查找时忽略大小写
  • –color:显示颜色(Centos7是别名)
  • -v: 显示未被匹配到的行
  • -o:只显示匹配到的行
  • -e:实现多个选项间的逻辑关系or关系
  • -n:显示匹配的编号
  • -c:统计匹配的字符串
  • -q:静默模式,不输出任何信息
  • -w:整行匹配整个单词
  • -A #:after,匹配到字符的前边#行也输出到显示器上
  • -B #:before,匹配到字符的后边#行也输出到显示器上
  • -C #:context,匹配到字符的前后边各#行也输出到显示器上
  • -F:相当于使用fgrep,fgrep不支持正则表达式
  • -E:相当于egrep,egrep支持正则表达式

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

(0)
oranixoranix
上一篇 2017-03-26 13:03
下一篇 2017-03-26 14:37

相关推荐

  • 用户和组管理类命令详解

    用户和组管理类命令详解 组管理 groupadd 功能描述:创建一个新组 命令格式: groupadd [选项] GROUP 选项: -g GID 表示指定GID,默认情况下使用的是最小的未使用过的GID -r 表示创建一个系统组 groupmod 功能描述:修改组属性 命令格式:groupmod [选项] GROUP 选项: -g GID 表示修改GID …

    Linux干货 2017-07-16
  • grep、find练习

    1.显示当前系统上root,fedora或user1用户的默认shell [root@study ~]# cat /etc/passwd|grep -E "^(root|fedora|user1)"|cut -d: -f7 /bin/bash /bin/bash /bi…

    Linux干货 2016-11-27
  • 变量

    变量     在shell脚本中,单独的字符或者命令只能引用一次,对于变量,我们可以多次引用,且对变量的赋值修改方便。对于一条很长的命令或者频繁使用的路径等,我们可以赋值给一个变量,比如获得系统中所有用户的uid,要输入很长的一段命令,我们如果每次使用都输入命令是件很麻烦的事情,如果赋值变量,那么就会很方便。设置变量userui…

    Linux干货 2017-08-06
  • poweroff

    poweroff命令详解

    Linux干货 2018-03-04
  • Linux文件之普通权限及其特殊权限

    普通权限: 当我们使用ls -l命令查看某个文件时: [root@centos7 ~]# ls -l file1.txt  -rw-r–r–. 1 root root 30286 Aug  1 19:30 file1…

    Linux干货 2016-08-04
  • 链接的“软”与“硬”

    前言     类似Windows系统,Linux系统在进行文件管理时,也会引入链接概念。而链接又分为软链接和硬链接,两种链接适用于不同场合、不同用途,各有优缺点。在介绍软硬两种链接之前,需要先引入inode的概念。 Inode:     系统在管理文件时,为了有序寻址,会将元数据(metadata)和用户数据…

    Linux干货 2016-10-20