首页 > 代码库 > 文本处理三剑客之-grep

文本处理三剑客之-grep


文本处理工具:

Linux上文本处理三剑客:

    grep:文本过滤工具(以模式过滤:pattern)

    sed:stream editor,流编辑器,文本编辑工具

    awk:Linux上的实现为gawk,文本报告生成器(格式化文本)


正则表达式:regular expression  REGEXP

由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,

而是用于表示控制或通配的功能;


分两类:

    基本正则表达式:BRE

    扩展正则表达式:ERE

        元字符:\(hello[[:space:]]\+\)\+


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

作用:文本搜索工具,根据用户指定的"模式(过滤文件)"对目标文本逐行进行匹配检查,打印匹配到的行

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

正则表达式引擎:



grep [OPTIONS] PATTERN [FILE...]

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


    OPTIONS:

    --color=auto:对匹配到的文本着色后高亮显示

    -i:ignorecase,忽略字符大小写

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

    -v:--invert-match:显示不能被模式匹配到的行

    -E:支持使用扩展的正则表达式元字符

    -q:--quiet,--silent:静默模式,即不输出任何信息

    -A #:after,后 # 行

    -B #:before,前#行

    -C #:context,前后各#行



基本正则表达式元字符:

    字符匹配:

    .:匹配任意单个字符

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

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

    [:digit:]

    [:lower:]

    [:upper:]

    [:alpha:]

    [:alnum:]

    [:punct:]

    [:space:]

    [:digit:]

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

    默认工作于贪婪模式

    *:匹配其前面字符任意次;0,1,或多次

    例如:grep "x*y"  abxy  aby  xxxxxxy  yab

    .*:匹配任意长度的任意字符

    \?:匹配其前面的字符0次或一次;即其前面的字符是可有可无的

    \+:匹配其前面的字符一次或多次;即其前面的字符要出现至少一次

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

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

    \{0,n\}:至多n次

    \{m,\}:至少m次



位置锚定

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

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

    ^PATHERN$:匹配整行

    ^$:空白行

    ^[[:space:]]*$:空白行或包含空白字符的行


单词:非特殊字符组成的连续字符(字符串)都称为单词;

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

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

    \<PATTERN\>:匹配完整单词



分组及引用:

\(xy\)*ab 

\(\):将一个或多个字符捆绑在一起,当做一个整体进行处理


Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中


这些变量为:

\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符

\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符

\3

...



egrep:支持扩展的正则表达式实现类似于grep文本的过滤功能

# egrep 或者 

# grep -E


扩展正则表达式的元字符:

字符匹配:

    .:任意单个字符

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

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

    次数匹配:

    *:任意次:0,1,或多次;

    ?:0或1次;其前的字符是可有可无的

    +:其前字符至少1次;

    {m}:其前的字符m次

    {m,n}:

    {0,n}:

    {m,}:

位置锚定:

    ^:行首锚定;

    $:行尾锚定;

    \<,\b:词首锚定

    \>,\b:词尾锚定

分组及引用:

    ():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中

    后向引用;\1  \2  \3...

或者

    a|b:a或者b;或者整个左侧或右侧

    C|cat:C或者cat

    (C|c)at:Cat或者cat


本文出自 “似水流年” 博客,请务必保留此出处http://sixijie123.blog.51cto.com/11880770/1885875

文本处理三剑客之-grep