Linux文本三剑客
文本处理工具均支持正则表达式引擎
- grep:文本过滤工具,通过模式pattern工具进行匹配
- sed:文本编辑工具,stream editor 流编辑器
- awk:Linux文本报告生成器(格式化文本) 本质是gawk,awk是软连接(快捷方式)
正则表达式
基本正则表达式BRE集合
字符 | 作用 | 举例/说明 |
---|---|---|
^ | 尖角号,用于模式最左边,匹配以某字符串开头 的行 |
^apple,匹配以apple单词开头的行 |
$ | 美元符,用于模式最右边,匹配以某字符串结尾 的行 |
abc$,匹配以abc结尾的行 |
^$ | 组合符,表示空行 | 匹配以空字符开头、空字符结尾的行,也就是空行 |
. | 小数点,匹配任意一个有且只有一个 字符,不能匹配空格 |
一行有多个字符的情况呢?是算一个字符还是多个字符然后匹配其中一个? |
\ | 反斜杠,转义字符,用于还原字符原本的含义 | “\.”,输出的结果是一个普通的小数点 |
* | 星号,匹配前一个字符连续出现 0次或1次以上,重复0次代表空,即匹配所有内容 |
a*,表示匹配多个连续的a字符 |
.* | 组合符,匹配所有内容除了空行 | .*,输出所有行的内容除了空行 |
^.* | 组合符,匹配任意多个字符开头 的内容 |
挺奇怪的,有点抽象 |
.*$ | 组合符,匹配任意多个字符结尾 的内容 |
挺奇怪的,有点抽象x2 |
[abc] | 中括号,匹配中括号中的任意一个字符,a或b或c,也可以写成[a-c] | ^[a-z],用这个不就实现了匹配以任意小写字母开头的行嘛 |
[^abc] | 中括号内带尖角符,匹配除了 中括号中的任意一个字符的其它字符 |
相当于对[abc]的结果取反嘛 |
补充
\d:表示一个十进制的数字 [0-9] \D:表示非数字 \w:表示一个字 [0-9a-zA-Z_]_ \W:表示除[0-9a-zA-Z_]之外的字符 \s:表示一个空白字符(空格,tab,换页符等) \S:表示一个非空白字符
拓展正则表达式ERE集合
拓展正则必须使用grep -E 才能生效
TIPS:
egrep不推荐使用,使用grep -E代替
grep不加参数时,需要在特殊字符前加转义符\才能识别为正则表达式
字符 | 作用 | 说明 |
---|---|---|
+ | 加号,匹配前一个字符一次或者多次 | a+,表示匹配多个a |
[abc]+ | 中括号加号组合,匹配中括号中的a或b或c,一次或者多次 | 也可以写成[a-c]+ |
? | 问号,匹配前一个字符0次或者1次 | a?,表示匹配0个a或最多1个a |
| | 竖杠,表示或者,同时过滤多个字符串 | a|b|c |
() | 小括号,分组过滤,括号中的内容为一个整体 | (?) |
a{n,m} | 表示匹配a字符最少n次,最多m次 | 任意字符+{最少值,最多值} |
a{n,} | 表示匹配a字符最少n次 | |
a{,m} | 表示匹配a字符最多m次 | |
a{z} | 表示匹配a字符正好z次 | |
\> | 最右侧,代表精确匹配 | ^(abc|123)\>,表示匹配到abc、123的内容结束,不会匹配到abc1、abc2、1234、123d |
\< | 最左侧,代表精确匹配 | 案例 |
awk的功能主要是:
将文件
逐行读入
;以空格、制表符(TAB键)为默认分隔符将每行
切片
;切开的部分再进行各种
分析
。
grep命令
全拼:Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行匹配检查,打印匹配到的行
模式:由正则表达式的
元字符
及文本字符
所编写的过滤条件
语法
1 | grep [option] [pattern] <file> |
常见参数[option]
-i 忽略大小写
-o 只输出匹配的内容,仅仅显示匹配到的字符串本身
-v 显示不能被模式匹配到的行,相当于取反,即排除匹配的项
-E 支持使用拓展正则表达式元字符
-q、–quiet、–slient 静默模式,即不输出任何信息-n 显示匹配行的行号
-c 统计匹配到的行数
–color=auto 为grep过滤结果添加颜色
-w 只过滤单词
其它参数
-m 匹配内容最多出现的次数
-l 只打印匹配到内容的文件名print only names of FILEs containing matches
grep命令之基本正则实践
首先,准备文本文件REg1.txt
1 | I am studying REg. |
^ 尖角号,用于模式最左边,匹配以某字符串
开头
的行
1 | ``` |
TIPS:
在Linux平台下,所有文件内容行的结尾都有一个$
可以使用cat -A或者cat -En查看
. 小数点,匹配任意一个
有且只有一个
字符,不能匹配空格
1 |
* 星号,匹配前一个字符
连续出现
0次或1次以上,重复0次代表空,即匹配所有内容
1 |
.* 组合符,匹配所有内容除了空行
1 | ``` |
.*$ 组合符,匹配任意多个字符
结尾
的内容
1 | ``` |
[^abc] 中括号内带尖角符,匹配
除了
中括号中的任意一个字符的其它字符
1 | ``` |
[abc]+ 中括号加号组合,匹配中括号中的a或b或c,一次或者多次,也可以写成[a-c]+
1 |
? 问号,匹配前一个字符0次或者1次;a?,表示匹配0个a或最多1个a
1 |
| 竖杠,表示或者,同时过滤多个字符串,a|b|c
1 |
() 小括号,分组过滤,括号中的内容为一个整体, (?)
1 |
a{n,m} 表示匹配a字符最少n次,最多m次,任意字符+{最少值,最多值}
1 |
a{n,} 表示匹配a字符最少n次
1 |
a{,m} 表示匹配a字符最多m次
1 |
a{z} 表示匹配a字符正好z次
1 |