shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

时间:2021-06-25 21:28:05

在“[]“中可以有以下几种形式,每种形式的含义如后所述。

 

1.[list]

匹配list中的任意单一字符,只要文件中此行包含list中的某一字符都会被匹配。

<1>例regular_expression.sh

shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

图1.regular_expression.sh脚本

 

[f#]作用:匹配for_read.c文件中包含字符’f’和’#’的行。

<2>for_read.c内容

shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

图2.for_read.c文件内容

<3>运行regular_expressiom.sh脚本后将for_read.c中包含’f’或’#’的行输出到屏幕上,顺序按照for_read,c中的顺序输出。

shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

图3.regular_expression.sh脚本运行结果

 

2.[^list]

匹配除list字符外的其它字符。

<1>例:regular_expression.sh

shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

图4.regular_expression.sh脚本

<2>运行脚本得到结果

shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

图5.regular_expression.sh脚本运行结果

可见,for_read.c中的内容全部被输出。这是因为for_read.c中第一行除了包含字符串”#include”之外,还有” <stdio.h>”,故匹配到不含’[#include]’任意其它字符的内容。

<3>修改脚本如下

shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

图6.regular_expression.sh脚本

运行结果:

shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

图7.regular_expression.sh脚本运行结果

可见,for_read.c中的第一行内容全被正则表达式’[^#include <stdio.>]’所屏蔽。

 

<4>总结

<1>用[^list]时,若文件中除包含list内容还有其它,则照样会被匹配。

<2>使用[list]或[^list]时,最好是用’ [list]’或‘[^list]’,避免报错(如使用”grep [#include <stdio.h>] for_read.c”语句运行脚本时报错:./regular_expression.sh: line 3: stdio.h:没有那个文件或目录

 

在"[]"中使用‘-’。

3.[a-z]

字符范围。匹配指定范围内的任意字符。

这个简单,只要文件字符串中包含”a-z”中的任意字符就会被匹配。

 

4.[^a-z]

负值字符范围。匹配任何不在指定范围内的任意字符。

<1>例:regular_expression.sh

shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

图8.regular_expression.sh脚本

<2>运行脚本得到结果

shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

图9.regular_expression.sh脚本运行结果

见图9,for_read.c中的每一行内容都被输出来。这是因为在每一行中都有不属于’a-z’的字符(如:’<’、’(’、’{’、’;’),这是这些不属于正则表达式中的字符被匹配中而被输出。

 

5.a[abc]b

首先,文件中要包含字符串”axb”,a和b之间只能有一个字符,若此字符属于“[]”内的某个字符,则包含字符串”axb”的行将会被匹配,’x’为‘a’或’b’或‘c’。

 

6.a[^abc]b

首先被匹配的行要包含ayb,且y不为’a’且不为’b’且不为’c’时,这一行将被选中。

<1>例regular_expression,sh

shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

图10.regular_expression.sh脚本

<2>运行脚本得结果

shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]

图11.regular_expression.sh脚本运行结果

<3>分析

首先for_read.c中只有第一行包含了字符串”iyc”,其次字符’y’不属于正则表达式”[cl]”中的任意字符。所以此行被匹配而被输出。

 

7.根据需求,希望能灵活应用通配符”[]”达到目标

 

此次笔记记录完毕。