通配符:
文件名统配是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...