linux三剑客(grep awk sed)
简介
Linux三剑客主打信息处理,三剑合璧,几乎能满足你所有的信息需求。其中,grep专攻查找,sed精通编辑,awk主打分隔提取。
grep
如果你问我linux最叼的命令是什么的话,我会说是grep (global regular expressions print)
,在任何命令或文件流之后加上grep,面对密密麻麻的输出,它能帮你找到你想要的结果。
命令详解
--help
: 命令提示
-c
:仅列出文件中包含模式("文本或者正则")
的行数,即匹配到的总行数。
# 示例一 对文件进行搜索 grep -c "key" file
[root czx]# cat clean.log
[20230620-082401]: less than 50%, do nathing
[20230620-08:26:01]: less than 50%, do nathing
[20230620-08:27:01]: less than 50%, do nathing
[20230621-03:00:01]: less than 50%, do nathing
[20230624-11:00:01]: less than 50%, do nathing
[20230701-11:00:01]: less than 50%, do nathing
[20230708-03:00:01]: less than 50%, do nathing
[root@prod-pve-packet-gitlab-runner-001 czx]# grep -c less clean.log
7
#示例二 对管道流进行搜索 cat clean.log | grep -c "key"
"key"
[root czx] # cat clean.log | grep -c less
7
-i
:忽略模式中的字母大小写。
# 示例一 搜索文件中包含Less的关键字有几行
[root czx]# cat clean.log
[20230620-082401]: less than 50%, do nathing
[20230620-08:26:01]: less than 50%, do nathing
[20230620-08:27:01]: less than 50%, do nathing
[20230621-03:00:01]: less than 50%, do nathing
[20230624-11:00:01]: less than 50%, do nathing
[20230701-11:00:01]: less than 50%, do nathing
[20230708-03:00:01]: less than 50%, do nathing
[root@prod-pve-packet-gitlab-runner-001 czx]# cat clean.log | grep -c Less
0
# *示例二 搜索文件中包含Less的关键字有几行 忽略大小写
[root@prod-pve-packet-gitlab-runner-001 czx]# cat clean.log | grep -ci Less
7
-l
:列出带有匹配行的文件名。
# 示例一 递归搜索当前文件夹中包含less关键字的文件
[root czx]# grep -lr less *
clean.log
clean.sh
# 示例二 搜索clean.log、clean.sh文件中包含less的关键字
[root czx]# grep -l less clean.sh clean.log
clean.sh
clean.log
-n
:在每一行的最前面列出行号。
# 示例一 搜索clean.log文件中包含less的关键字,并显示行号
[root czx]# grep -n less clean.log
1:[20230620-082401]: less than 50%, do nathing
2:[20230620-08:26:01]: less than 50%, do nathing
3:[20230620-08:27:01]: less than 50%, do nathing
4:[20230621-03:00:01]: less than 50%, do nathing
5:[20230624-11:00:01]: less than 50%, do nathing
6:[20230701-11:00:01]: less than 50%, do nathing
7:[20230708-03:00:01]: less than 50%, do nathing
-v
:列出没有匹配模式的行。
# 示例一 搜索clean.log文件中不包含Less的关键字,并显示行号
[root czx]# grep -nv less clean.log
1:[20230620-082401]: less than 50%, do nathing
2:[20230620-08:26:01]: less than 50%, do nathing
3:[20230620-08:27:01]: less than 50%, do nathing
4:[20230621-03:00:01]: less than 50%, do nathing
5:[20230624-11:00:01]: less than 50%, do nathing
6:[20230701-11:00:01]: less than 50%, do nathing
7:[20230708-03:00:01]: less than 50%, do nathing
-w
:匹配整个单词,如果是字符串中包含这个单词,则不匹配。
# 示例一 搜索clean.log文件中的less单词,包含less的单词不做匹配
[root czx]# grep -wnless clean.log
[20230620-082401]: less than 50%, do nathing
[20230620-08:26:01]: less than 50%, do nathing
[20230620-08:27:01]: less than 50%, do nathing
[20230621-03:00:01]: less than 50%, do nathing
[20230624-11:00:01]: less than 50%, do nathing
[20230701-11:00:01]: less than 50%, do nathing
[20230708-03:00:01]: less than 50%, do nathing
-o
:只显示匹配到的字符串,每个匹配到的字符串单独显示一行。
# 示例一 搜索clean.log文件中的less,不包含不匹配的字符串
[root czx]# grep -wnless clean.log
less
less
less
less
less
less
less
--color=[auto、always、never]
:表示对匹配到的文本着色显示控制。
当然,grep也支持正则表达式的搜索
正则表达式的通配符如下:
*
: 将匹配0个或者多个字符。
.
:将匹配任何一个字符,且只能是一个字符。
[xyz]
:匹配方括号中的任意一个字符。
[^xyz]
:匹配方括号中的任意一个字符。
^
: 锁定行的开头。
$
:锁定行的结尾。
?
:匹配前面的子表达式0次或者1次。
+
:匹配前面的子表达式1次或者多次。
|
: 匹配于|符号前或后的正则表达式。
{n,m}
:最少匹配n次,最多匹配m次和BRE的区别是不需要加\。