Linux中的通配符和正则表达式

通配符:

文件名统配是bash的特性之一,通配符一般用于文件名的匹配。

*   :任意长度的任意字符

?   :匹配任意单字符

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

例:[abc], [a-z], [0-9], [0-9a-z]

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

例:[^0-9a-z]

字符集合:

[:space:] :所有空白字符

[:punct:] :所有标点符号

[:lower:] :所有小写字母

[:upper:] :所有大写字母

[:digit:] :所有数字

[:alnum:] :所有数字、字母

[:alpha:] :所有字母

Linux文本处理工具:

grep, egrep, fgrep(用于文件内容匹配,将文件名转换为字符窜也可以用这些工具进行搜索)

文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。

正则表达式:

正则表达式是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能,一般用于文件内容匹配(通配符常用于文件名的匹配),将文件名转换为字符窜也可以用这些工具进行搜索。正则表达式又可分为基本正则表达式和扩展正则表达式。

1)基本正则表达式:grep

2)扩展正则表达式: egrep, grep -E

fgrep: fast, 不支持使用正则表达式(直接查找匹配的内容)

1)基本正则表达式的元字符:

字符匹配:

.  : 匹配任意单个字符(区别于通配符的*)

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

[0-9], [[:digit:]]

[a-z], [[:lower:]]

[A-Z], [[:upper:]]

[[:space:]]

[[:punct:]]

[[:alpha:]]

[[:alnum:]]

[^]:取反。例:[^[:alpha:]],匹配所有的非字母

次数匹配元字符:用于实现指定其前面的字符所能够出现的次数

*: 任意长度,它前面的字符可以出现任意次

例如:x*y

\?: 0次或1次,它前面的字符是可有可无的

例如:x\?y

\{m\}: m次,它前的字符要出现m次

例如:x\{2\}y

\{m,n\}: 至少m次,至多n次

例如:x\{2,5\}y

\{m,\}:至少m次

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

.*:任意长度的任意字符(工作于贪婪模式:尽可能多的去匹配

位置锚定:

^: 行首锚定;

写在模式最左侧

$: 行尾锚定;

写在模式最右侧

^$: 空白行

匹配单词(不包含特殊字符的连续字符组成的串):

\<: 词首,出现于单词左侧,\b

\<char(或者\bchar)

\>: 词尾,出现于单词右侧, \b

char\>(或者char\b

分组:

\(\)

例如:\(ab\)*

分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用

引用:

\#: 引用第n个括号所匹配到的内容,而非模式本身

例如:

\(ab\?c\).*\1    括号匹配到的内容是abc,所以后面\1只匹配abc

命令选项(grep):

-v: 反向选取

-o: 仅显示匹配的字串,而非字串所在的行

-i: ignore-case,忽略字符大小写

-E: 支持使用扩展正则表达式

-A # 显示前几行

-B # 显示后几行

-C # 显示上下几行

2)扩展正则表达式(无需转义字符):

字符匹配:

.

[]

[^]

次数匹配:

*     :任意次

?     :0次或1次

+     :至少1次;(相对于基本正则多出的一项)

{m}   : 精确匹配m次

{m,n} : 至少m次,至多n次

{m,}  :至少m次

{0,n} :最多n次

锚定:

^ :行首锚定;

$ :行尾锚定;

\<, \b(这里任然需要转义)

\>, \b(同上)

^$, ^[[:space:]]*$

分组:

()

引用:\1, \2, \3(同基本正则表达式)

注意:

a|b: a或者b

conC|cat:conC或cat

con(C|c)at:concat或conCat

 

扩展正则表达式的使用:

grep -E  ‘PATTERN‘ FILE...

egrep ‘PATTERN‘ FILE...


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。