正则表达式

匹配文本中的字符串,针对文件内容的文本过滤工具里,

基本正则表达式

字符匹配

. 匹配任意单个字符
[list] 匹配list中的任意单个字符
[^] 匹配list外任意单个字符
[:alnum:] 匹配字母和数字字符
[:alpha:] 匹配字母
[:ascii:] 匹配ASCII字符
[:blank:] 匹配空格或制表符
[:cntrl:] 匹配ASCII控制符
[:digit:] 匹配数字
[:graph:] 匹配非控制、非空格字符
[:lower:] 匹配小写字母
[:print:] 匹配可打印字符
[:punct:] 匹配标点符号字符
[:space:] 匹配空白字符
[:upper:] 匹配大写字符
[:xdigit:] 匹配进制数字

匹配次数

* 匹配前面任意字符的任意次数
.* 匹配前面任意长度的字符
\? 匹配前面的字符0或1次
\+ 匹配前面的字符至少1次
\{m\} 匹配前面的字符m次
\{m,n\} 匹配前面的字符至少m次,最大n次
\{0,n\} 匹配前面的字符至多n次
\{m,\} 匹配前面的字符至少m次

位置锚定

^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧 (需要加在所要匹配的词后面)
^PATTREN$ 用于模式匹配整行
^$ 匹配空行
\ 匹配整个单词
\< 词首锚定,用于单词模式的最左侧
\> 词尾锚定,用于单词模式的最右侧

分组

  • (gp):将一个或多个字符进行捆绑,当作成一个字符

(xy)*ab —> 文本中xy出现任意次数和ab字符

  1. [root@tenor ~]# grep "\(xy\)*ab" 1.txt
  2. 524963 4 drwxr-xr-x 2 root root 4096 Feb 12 22:23 ./.cache/abrt
  3. 527924 4 -rw------- 1 root root 11 Feb 12 22:23 ./.cache/abrt/lastnotification
  4. 524966 4 drwxr-xr-x 2 root root 4096 Jan 21 2019 ./.config/abrt
  5. [root@tenor ~]# grep "\(xy\)\+ab" 1.txt
  • ps:分组括号中的模式匹配搭配的内容会被正则表达式引擎记录与内部变量中,用于后续引用 \1,\2,\3……,并且可以在本次正则中进行引用

\1 : 从最左侧起,第一个括号中匹配到的内容

(xy)*ab —->\1 引用变量是:xy

(ab+(xy)) —->
\1 引用变量是:(ab+(xy)
\2引用变量是:xy

  • ps:-v:反转

**

  • [root@localhost tmp]# grep -Ev “^#I^$” filename 找出配置文件中有效配置

    拓展正则表达式

    字符匹配

    | . | 匹配任意单个字符 | | —- | —- | | [list] | 匹配list中的任意单个字符 | | [^] | 匹配list外任意单个字符 |

匹配次数

* 匹配前面任意字符的任意次数
.* 匹配前面任意长度的字符
? 匹配前面的字符0或1次
+ 匹配前面的字符至少1次
{m} 匹配前面的字符m次
{m,n\} 匹配前面的字符m-n次
{0,n\} 匹配前面的字符至多n次
{m,\} 匹配前面的字符至少m次

分组

  • (gp) : 将一个或多个字符捆绑在一起;当作一个字符
    (xy)*ab —> 文本中xy出现任意次数和ab字符
    Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部变量中,
    这些变量存储在 \1 \2 \3 …. 并且可以在本次正则中进行引用
  \1 : 从最左侧起,第一个括号中匹配到的内容

  (ab+(xy))

  \1: ab+(xy)
  \2: xy