三剑客(grep,sed,awk)
运维工具。 | Command | 场景 | |---------------- | --------------- | | grep | 过滤 | | sed | 替换,修改,取行 | | awk | 取列,统计计算 |
Basic RE 语法
^ 以什么为开头的行
^tmp
$ 以什么结尾的行
tmp$
^$ 空行
. 任意一个字符
.$ 匹配一行的末尾
转义字符
\n 回车 \t tab . 表示.
* 前面的字符重复了0次或者多次
1*表示1出现0次或多次,所以grep会全部显示。 前面的字符不会强制匹配。
.* 表所有
^.*t 一行从头到最后一个t (正则表达式的贪婪性)
[] 匹配任意一个字符
中括号里面一般会去掉特殊含义(.或者\等等)
[abc] 匹配a或者b或者c
[a-z] [A-Z] [0-9] 匹配字母和数字
[a-zA-Z] or [a-Z] 匹配大小写字幕
[a-zA-Z0-9] or [a-Z0-9] 匹配字母和数字
注意[a-Z]并不总是起作用,后者比较好
[^] 取反,排除
[^abc] 除去ab之外的所有字符
这个^必须放在最前面
Extended RE 语法
grep默认是不能使用扩展语法的 1.egrep 2.grep -E 3.转义 +
+ 前一个字符重复一次或多次
0+
[0-9]+ 找出数字
[a-Z]+ 找出单词
| 或者
boy|bey 相比较于[]可以匹配单词
() 相当于一个整体(一个字符) 反向引用sed
b(e|o)y
b[eo]y
{} 连续出现
o{n,m} 前一个字母o至少出现了n次,最多出现了m次 o{n} ==n o{n,} >=n o{,m} <=m
? 前一个字符出现0次或者1次
补充
反义
\W :匹配任意不是字母,数字,下划线,汉字的字符。
\S :匹配任意不是空白符的字符。
\D :匹配任意非数字的字符。
\B :匹配不是单词开头或结束的位置。
[^123] :匹配除了 1,2,3 以外的任何字符。
2 进阶
2.1 后向引用
使用 () 框住一个子表达式后,该表达式会有一个编号(从 1 开始),之后,可以使用 \组号 的形式重复编号为 组号 的子表达式。
(exp) :匹配 exp,并自动分组。
(?(?<!exp) :匹配 exp 前面的不是 exp 的位置。
(?#note) :这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读。
\n :重复组号为 n 的子表达式。
grep
-E 支持扩展正则语法
-P:Perl RE -A:除了匹配行,额外显示该行之后的N行 -B:除了匹配行,额外显示该行之前的N行 -C:除了匹配行,额外显示该行前后的N行 -c:统计匹配的行数 -e:实现多个选项间的逻辑 or 关系 -E:支持扩展的正则表达式 -F:相当于 fgrep -i:忽略大小写 -n:显示匹配的行号 -o:仅显示匹配到的字符串 -q:安静模式,不输出任何信息,脚本中常用 -s:不显示错误信息 -v:显示不被匹配到的行 -w:显示整个单词 --color:以颜色突出显示匹配到的字符串
搭配管道
cat file | grep g[o]+d