网络安全——linux文本三剑客
awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。
1.grep
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红)。
命令参数(可使用grep --help寻求帮助)
[root@localhost ~]# cat grepdemo.txt
aaa
bbbbb
AAAAaaa
BBBBBASDABBBDA
#-A显示行数:除了显示符合范本样式的那一列之外,还显示该行之后的所有内容
[root@localhost ~]# grep -A2 b grepdemo.txt
bbbbb
AAAAaaa
BBBBBASDABBBDA
#-B显示行数:除了显示符合范本样式的那一列之外,还显示该行之前的所有内容
[root@localhost ~]# grep -B3 a grepdemo.txt
aaa
bbbbb
AAAAaaa
#-C显示行数:除了显示符合范本样式的那一列之外,还显示该行之前和之后的所有内容
[root@localhost ~]# grep -C3 A grepdemo.txt
aaa
bbbbb
AAAAaaa
BBBBBASDABBBDA
#-c:显示单词匹配出现的行数
[root@localhost ~]# grep -c bbbbb grepdemo.txt
1
#-e:实现多个选项间的逻辑or关系
[root@localhost ~]# grep -e aaa -e bbbbb grepdemo.txt
aaa
bbbbb
AAAAaaa
#-i:ignore 忽略大小写匹配
[root@localhost ~]# grep -i a grepdemo.txt
aaa
AAAAaaa
BBBBBASDABBBDA
#-n:number 显示匹配到的行号
[root@localhost ~]# grep -n b grepdemo.txt
2:bbbbb
#-in:连用 显示忽略大小写的匹配以及相应的行号
[root@localhost ~]# grep -in b grepdemo.txt
2:bbbbb
4:BBBBBASDABBBDA
#-o:只显示匹配到的字符串
[root@localhost ~]# grep -o ASDA grepdemo.txt
ASDA
#-q:静默模式,不输出任何信息
[root@localhost ~]# grep -q aaa grepdemo.txt
#-v:显示不被匹配到的行,相当于[^]反向匹配
[root@localhost ~]# grep -v bbbbb grepdemo.txt
aaa
AAAAaaa
BBBBBASDABBBDA
#-w:匹配整个单词
[root@localhost ~]# grep -w aaaa grepdemo.txt
#无输出,无完整的单词匹配
[root@localhost ~]# grep -w aaa grepdemo.txt
aaa
#-f:从file文件获取PATTERN匹配
[root@localhost ~]# touch grep.txt
#使用vim编辑
[root@localhost ~]# cat grep.txt
aaa
bbb
[root@localhost ~]# grep -f grep.txt grepdemo.txt
aaa
bbbbb
AAAAaaa
2.正则表达式
2.1 匹配字符
[root@localhost ~]# cat test1
abc
123
//[
. 匹配任意单个字符,不能匹配空行
[root@localhost ~]# grep . test1
abc
123
//[
[]匹配指定范围的任意单个字符
[root@localhost ~]# grep [a] test1
abc
[root@localhost ~]# grep [a1] test1
abc
123
[root@localhost ~]# grep [1] test1
123
[^]取反
[root@localhost ~]# grep [^a] test1
abc
123
//[
[root@localhost ~]# grep [^abc] test1
123
//[
[:alnum:] 或 [0-9a-zA-Z],匹配数字和字母
[root@localhost ~]# grep [[:alnum:]] test1
abc
123
[:alpha:] 或 [a-zA-Z],匹配字母
[root@localhost ~]# grep [[:alpha:]] test1
abc
[:upper:] 或 [A-Z],匹配大写字母
[root@localhost ~]# grep [[:upper:]] te