Liunx三剑客:
grep:文本过滤工具,( 模式:pattern)工具
sed:stream editor,流编辑器;文本编辑工具
awk: Linux Linux gawk的文本报告生成器(格式化文本),Linux上是gawk
正则表达式
Linux三剑客主要分两类:
1.基本正则表达式(BRE basic regular expression)
BRE对应元字符有 ^$.[]*
2.扩展正则表达式(ERE extended regular expression)
ERE在BRE基础上,增加上 (){}?+| 等字符
基本正则表达式BRE集合
- 匹配字符
- 匹配次数
- 位置锚定
符号 | 作用 |
---|---|
^ | 尖角号,用于模式的最左侧,如"^ab"匹配以ab单词开头的行 |
$ | 美元符,用于模式的最右侧,如"ab$",表示以ab单词结尾的行 |
^$ | 组合符,表示空行 |
. | 匹配任意一个且只有一个字符,不能匹配空行 |
\ | 转义字符,让特殊含义的字符,现出原形,还原本意,例如.代表小数点 |
* | 匹配前一个字符(连续出现)0次或1次以上,重复0次代表空,即匹配所有内容 |
.* | 组合符,匹配任意长度的任意字符 |
[abc] | 匹配[]集合内的任意一个字符,a或b或c,可以写[a-c] |
[^abc] | 匹配除了后面的任意字符,a或b或c,表示对[abc]的取反 |
<pattern> | 匹配完整的内容 |
<或> | 定位单词的左侧,和右侧,如可以找出"da chao ge",却找不出"dachaoge" |
扩展正则表达式BRE集合
扩展正则必须用grep -E才能生效
符号 | 作用 |
---|---|
+ | 匹配前一个字符1次或多次,前面字符至少出现1次 |
[: /]+ | 匹配括号内的":“或者”/"字符一次或者多次 |
? | 匹配前一个字符0次或者1次,前面字符可有可无 |
竖线 | 表示或者,同时过滤多个字符串 |
() | 分组过滤,被括起来的内容表示一个整体 |
a{n,m} | 匹配前一个字符最少n次,最多m次 |
a{n,} | 匹配前一个字符最少n次 |
a{n} | 匹配前一个字符正好n次 |
a{,m} | 匹配前一个字符最多m次 |
Tips:
grep命令需要使用参数 -E即可支持正则表达式
egrep不推荐使用,使用grep -E替代
grep不加参数,得在特殊字符前面""反斜杠,识别为正则
三剑客之grep
全拼:Global search REgular expression and Print out the line
作用:文本搜索工具,根据用户指定的”模式(过滤条件)“对目标文本逐行进行匹配检查,打印匹配到的行
模式:由正则表达式的元字符及文本字符所编写出的过滤条件;
语法:
grep [options] [pattern] file
命令 参数 匹配模式 文件数据
-i:ignorecase,忽略字符的大小写
-o:仅显示匹配到的字符串本身;
-v:–invert-match:显示不能被模式匹配的行;
-E:支持使用扩展的正则表达式元字符;
-q,–quiet,–silent:静默模式,即不输出任何信息;
grep命令是Linux系统中最重要的命令之一,功能是从文本文件或管道数据流中筛选匹配的行和数据,如果再配合正则表达式,功能十分强大,是Linux运维人员必备的命令
grep命令里的匹配模式就是你想要找的东西,可以是普通的文字符号,也可以是正则表达式
参数选项 | 解释说明 |
---|---|
-v | 排除匹配结果 |
-n | 显示匹配行与行号 |
-i | 不区分大小写 |
-c | 只统计匹配的行数 |
-E | 使用egrep命令 |
-color=auto | 为grep过滤结果添加颜色 |
-w | 只匹配过滤的单词 |
-o | 只输出匹配的内容 |
正则表达式grep实践
创建test.txt文件,内容如下
hello linux.
HELLO grep.
food
foood
flad
grep “food” test.txt -n #匹配有food的行,并打印行号
grep “food” test.txt -n -v #匹配没有food的行,并打印行号
grep “hello” test.txt -i #匹配hello的行,不区分大小写
grep -E “hello|food” test.txt #匹配hello或food的行
grep -E “hello|food” test.txt -c #统计匹配到的行数
grep -E “hello|food” test.txt -o #-o是输出匹配的内容
grep -E “hello” test.txt -w #-w单词匹配
grep -n ‘^$’ test.txt #匹配空行
grep -Ev “^#|^$” test.txt #过滤掉空行和以#号开头的行(测试过程中可以再文本中加一行#开头的行)
grep -n -i ‘^hello’ test.txt #匹配以hello开头的行
grep -n -i ‘d$’ test.txt #匹配以d结尾的行
Tip:
注意在Linux平台下,所有文件的结尾都有一个$符
可以cat -A 查看文件
grep -n ‘.$’ test.txt #匹配以小数点为结尾的行,注意如果小数点不加转义符,不加就会匹配任意一个且只有一个字符,除空行
grep -n ‘h*’ test.txt #*是找出前一个字符0次或者多次,找出文中出现”h“的0次或多次。如果是.*组合符,就代表匹配所有内容
grep -n ‘.*o’ test.txt #匹配以任意字符开始,最后一个o字母结束,这种属于贪婪匹配,贪婪匹配可以百度了解下。
- [a-z]匹配所有小写单个字母
- [A-Z]匹配所有单个大写字母
- [a-zA-Z]匹配所有单个大小写字母
- [0-9]匹配所有单个数字
- [a-zA-Z0-9]匹配所有数字和字母
gre