grep中正则表达式的用法

 

在输入grep --help后有关于正则表达式有下面的提示。

 

  -E, --extended-regexp     PATTERN is an extended regular expression (ERE)
  -F, --fixed-strings       PATTERN is a set of newline-separated strings
  -G, --basic-regexp        PATTERN is a basic regular expression (BRE)
  -P, --perl-regexp         PATTERN is a Perl regular expression
  -e, --regexp=PATTERN      use PATTERN for matching

下面语句能够匹配 出 Filename=, 参数选择为 -oP, 而选择-E 或者-G都匹配不出来。

echo "Files={[Filename=fniidfj;FFFFF=Name@GV]}" | grep -oP 'Filename=(?=f)'   

 

先看一组神奇的命令

[root@elastix82 tmp]# echo $html
111aaa222
[root@elastix82 tmp]#
[root@elastix82 tmp]# echo $html| grep -oP '(?<=td>).*(?= aaa
[root@elastix82 tmp]#

 

基本正则表达式和扩展表达式支持的字符不一致,所以写法是不一样的, 跟一般的正则表达式的写法也是不一样的。如下面所示。似乎零宽断言就不能在这里用,反正自己是没有调试出来过。 要用零宽断言是就用上面的 -P 选项就可以。

 

基本正则表达式的元字符

1、匹配字符:

.: 匹配任意单个字符
[]: 匹配范围内的任意单个字符
[^]: 匹配范围外的任意单个字符
    [:space:]: 空格
    [:upper:]: 大写字母
    [:lower:]: 小写字母
    [:alpha:]: 所有字母
    [:alnum:]: 所有的数字和字母
    [:digit:]: 所有的数字
    [:punct:]: 所有的标点符号

2、匹配个数:

*: 匹配其前字符任意次(包括0次)
\?: 匹配其前字符0或1次,即至多一次
\+: 匹配其前字符1次或多次,即至少一次
\{m\}: 匹配其前字符m次
\{m,n\}: 匹配其前字符至少m次,至多n次
    \{0,n\}: 匹配其前字符至多n次
    \{m,\}: 匹配其前字符至少m次

3、位置锚定:

^: 行首锚定
$: 行尾锚定
^PATTERN$: 用于PATTERN来匹配整行
    ^$: 空白行
    ^[[:space:]]*$: 空行或包含空白字符的行
单词:非特殊字符组成的连续字符(字符串)都称为单词
\<或\b: 词首锚定
\>或\b: 词尾锚定
    \: 匹配完整单词

4、分组及引用:

\(\): 将括号内的内容作为一个整体进行匹配
    正则表达式引擎会从左第一个左括号对应括号的分组匹配到的内容保存至变量\1中,第二个左括号中匹配到的内容保存至变量\2中,以此类推;
    引用:引用是在一个正则表达式当中有可能出现要使用前面分组中所匹配到的内容,而每次分组中匹配到的内容可能不相同,此时要和分组中匹配的内容相同的话就得使用引用。利用\1,\2变量来引用前面对应括号内的PATTERN;
        \1
        \2
        ...

 

扩展正则表达式的元字符

1、匹配字符:

.: 匹配任意单个字符
[]: 匹配范围内的任意单个字符
[^]: 匹配范围外的任意单个字符
    [:space:]: 空格
    [:upper:]: 大写字母
    [:lower:]: 小写字母
    [:alpha:]: 所有字母
    [:alnum:]: 所有的数字和字母
    [:digit:]: 所有的数字
    [:punct:]: 所有的标点符号

2、匹配个数:

*: 匹配其前字符任意次(包括0次)
?: 匹配其前字符0或1次,即至多一次
+: 匹配其前字符1次或多次,即至少一次
{m}: 匹配其前字符m次
{m,n}: 匹配其前字符至少m次,至多n次
    {0,n}: 匹配其前字符至多n次
    {m,}: 匹配其前字符至少m次

3、位置锚定:

^: 行首锚定
$: 行尾锚定
\<或\b: 词首锚定
\>或\b: 词尾锚定

4、分组及引用:

(): 将括号内的内容作为一个整体进行匹配
    \1
    \2
    ...

5、或:

|: |左边的整体或上右边的整体;
    C|cat: 表示C或cat
    (c|C)at: 表示cat或Cat


 

你可能感兴趣的:(Linux)