Linux文本处理三剑客:
1、grep : 文本过滤(模式:pattern)工具
2、sed : (stream editor),文本编辑工具
3、awk : Linux上的实现gawk,文本报告生成器
1、文本处理工具grep
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。
模式:由正则表达式字符及文本字符所编写的过滤条件。
(grep 支持标准正则表达式; egrep 支持扩展正则表达式,相当于grep -E ; fgrep 不支持正则表达式)
- 语法:grep [OPTIONS] PATTERN [FILE…]
选项:
–color=auto: 对匹配到的文本着色显示
-v: 显示不能够被pattern匹配到的行
-i: 忽略字符大小写 常用
-n: 显示匹配的行号,匹配到的是第几行 常用
-c: 统计匹配的行数,匹配到了多少行 常用
-o: 仅显示匹配到的字符串 常用
-q: 静默模式,不输出任何信息
-A #: after, 后#行,包含匹配到的行,还显示匹配到的行的后几行
-B #: before, 前#行,包含匹配到的行,还显示匹配到的行的前几行
-C #: context, 前后各#行,包含匹配到的行外,还显示匹配到的行的前后各几行
-e:实现多个选项间的逻辑or关系 ,多个-e 之间是或关系(grep –e ‘cat’ -e ‘dog’ file) 常用
-w:整行匹配整个单词,只能匹配整个单词(字母、数字、下划线都算单词一部分)
-E:使用ERE,相当于egrep 常用
-F:相当于fgrep,不支持正则
2、正则表达式
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。(man 7 regex)
分为两类:基本正则表达式:BRE
扩展正则表达式:ERE
基本正则表达式元字符:字符匹配、匹配次数、位置锚定、分组
- 字符匹配:
. 匹配任意单个字符;
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:digit:] 十进制数字 ([0-9]也可,匹配10-19之间的数字不能写成[10-29],要每一位分别写[1-2][0-9])
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 任何英文大小写字符
[:alnum:] 字母和数字
[:space:] 空白字符(水平和垂直的空白字符,比[:blank:] 包含范围广)
[:punct:] 标点符号
[:blank:] 空白字符(空格和制表符)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
- 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次 (贪婪模式:尽可能长的匹配)
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{m\} 匹配前面的字符m次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{m,\} 匹配前面的字符至少m次
- 位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧(^PATTERN)
$ 行尾锚定,用于模式的最右侧(PATTERN$)
^PATTERN$ 用于模式匹配整行( ^$ 空行 ^[[:space:]]*$ 水平或垂直空白行 )
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词
- 分组: \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如\(root\)\+表示root至少出现一次。
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)
利用: \1, \2, \3, …来引用前面从左到右第一个括号、第二个括号…匹配到的内容
如: \(bican\+\(bc\)*\)
\1 匹配 bican\+\(bc\)*
\2 匹配 bc
- 或者:\|
示例: a\|b 表示a或b C\|cat 表示C或cat \(C\|c\)at 表示Cat或cat
扩展正则表达式元字符
- 字符匹配(同基本正则表达式)
- 匹配次数
* 匹配前面的字符任意次,包括0次 (贪婪模式:尽可能长的匹配)
? 匹配其前面的字符0或1次
+ 匹配其前面的字符至少1次
{m} 匹配前面的字符m次
{m,n} 匹配前面的字符至少m次,至多n次
{,n} 匹配前面的字符至多n次
{m,} 匹配前面的字符至少m次
- 位置锚定(同基本正则表达式)
- 分组 : () 后向引用: \1 \2
- 或者: | 示例: (C|c)at 表示Cat或cat
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/96487