跳转至

三剑客(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,并命名为 Name,重复可用 \k。 (?:exp) :匹配 exp,但不捕获匹配的文本,也不给此分组分配组号。 (?=exp) :匹配 exp 前面的位置。 (?<=exp) :匹配 exp 后面的位置。 (?!exp) :匹配 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