码迷,mamicode.com
首页 > 其他好文 > 详细

文本处理三剑客之GREP

时间:2019-03-16 15:34:56      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:vim   一起   graph   var   条件   标点符号   软件   option   一个   

文本处理三剑客(grep)
  • grep:文本过滤(模式:pattern)工具
    grep, egrep, fgrep(不支持正则表达式搜索)
    作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行
    模式:由正则表达式字符及文本字符所编写的过滤条件

    grep命令选项

    -color=auto: 对匹配到的文本着色显示
    -m # 匹配#次后停止
    -v 显示不被pattern匹配到的行
    -I 忽略字符大小写
    -n 显示匹配的行号
    -c 统计匹配的行数
    -o 仅显示匹配到的字符串
    -q 静默模式,不输出任何信息
    -A # after, 后#行
    -B # before, 前#行
    -C # context, 前后各#行
    -e 实现多个选项间的逻辑or关系
    grep –e ‘cat ’ -e ‘dog’ file
    -w 匹配整个单词
    -E 使用ERE
    -F 相当于fgrep,不支持正则表达式
    -f file 根据模式文件处理

    正则表达式

    REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
    程序支持:grep,sed,awk,vim, less,nginx,varnish等

    分两类:

    基本正则表达式:BRE
    扩展正则表达式:ERE
    grep -E, egrep

    正则表达式引擎:

    采用不同算法,检查处理正则表达式的软件模块
    PCRE(Perl Compatible Regular Expressions)

    元字符分类

    字符匹配、匹配次数、位置锚定、分组
    man 7 regex

    基本正则表达式元字符

    字符匹配

    . 匹配任意单个字符
    [] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
    [^] 匹配指定范围外的任意单个字符
    [:alnum:] 字母和数字
    [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
    [:lower:] 小写字母
    [:upper:] 大写字母
    [:blank:] 空白字符(空格和制表符)
    [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
    [:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
    [:digit:] 十进制数字 [:xdigit:]十六进制数字
    [:graph:] 可打印的非空白字符
    [:print:] 可打印字符
    [:punct:] 标点符号正则表达式

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

    • 匹配前面的字符任意次,包括0次
      贪婪模式:尽可能长的匹配
      .* 任意长度的任意字符
      \? 匹配其前面的字符0或1次
      + 匹配其前面的字符至少1次
      {n} 匹配前面的字符n次
      {m,n} 匹配前面的字符至少m次,至多n次
      {,n} 匹配前面的字符至多n次
      {n,} 匹配前面的字符至少n次正则表达式

      位置锚定:定位出现的位置

      ^ 行首锚定,用于模式的最左侧
      $ 行尾锚定,用于模式的最右侧
      ^PATTERN$ 用于模式匹配整行
      ^$ 空行
      ^[[:space:]]*$ 空白行
      \< 或 \b 词首锚定,用于单词模式的左侧
      \> 或 \b 词尾锚定,用于单词模式的右侧
      \<PATTERN\> 匹配整个单词正则表达式
      分组

  • () 将一个或多个字符捆绑在一起,当作一个整体处理,如:(root)+
    分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
    \1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

示例: (string1+(string2))
\1 :string1+(string2)

\2 :string2

  • 后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身或者:|

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

egrep及扩展的正则表达式

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

扩展正则表达式的元字符

字符匹配

. 任意单个字符  
[] 指定范围的字符  
[^] 不在指定范围的字符扩展正则表达式  

次数匹配

* 匹配前面字符任意次  
? 0或1次  
+ 1次或多次  
{m} 匹配m次  
{m,n} 至少m,至多n次扩展正则表达式  

位置锚定

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

分组

()  
后向引用:\1, \2, ...  

或者

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

正则表达式

元字符 定义
^ 行首
$ 行尾
. 任意单一字符
[] []内任意单一字符
[^] 除[]内任意单一字符
* *前面字符重复不确定次数
+ +前面字符重复一次以上不确定次数
\? ?前面字符重复0或1次
\ 转义符
.* 任意长度字符
{n} 前面字符重复n次
{n,} 前面字符重复n次以上
{m,n} 前面字符重复m次和n次之间
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 水平空白字符(空格和制表符)
[:space:] 所有水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
[:xdigit:] 十六进制数字

文本处理三剑客之GREP

标签:vim   一起   graph   var   条件   标点符号   软件   option   一个   

原文地址:https://blog.51cto.com/12980155/2364003

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!