[华为云在线课程][Linux文本处理工具和正则表达式][第三章文本处理三剑客之grep][学习笔记]

举报
John2021 发表于 2022/04/12 11:14:06 2022/04/12
【摘要】 Linux中的文本处理三剑客grep 命令主要对文本的(正则表达式)行基于模式进行过滤sed stream editor,文本编辑工具awk Linux上的实现gawk,文本报告生成器 grepgrep:Global search Regular Expression and Print out the line作用:文...

Linux中的文本处理三剑客

grep            命令主要对文本的(正则表达式)行基于模式进行过滤
sed             stream editor,文本编辑工具
awk             Linux上的实现gawk,文本报告生成器

grep

grep:Global search Regular Expression and Print out the line
作用:文本搜索工具,根据用户指定的"模式"对目标文件逐行进行匹配检查;打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
格式:

grep [OPTION] PATTERN [FILE...]

常见选项:

-color=auto         对匹配的文本着色显示
-m #                匹配#次后停止
-v                  显示不被pattern匹配到的行
-i                  忽略字符大小写
-n                  显示匹配的行号
-c                  统计匹配的行数
-o                  仅显示匹配到的字符串
-q                  静默模式,不输出任何信息
-A #                after,后#行
-B #                before,前#行
-C #                context,前后各#行
-e                  实现多个选项间的逻辑or关系,如:grep -e 'cat' -e 'dog' file
-w                  匹配整个单词
-E                  使用ERE,相当于egrep
-F                  不支持正则表达式,相当于fgrep
-f file             根据模式文件处理
-r                  递归目录,但不处理软链接
-R                  递归目录,但处理软链接
-a                  不要忽略二进制的数据
-b                  除了显示符合样式的那一行之前,标识出该行的第一个字符的编号
-s                  不显示错误信息
-V                  显示版本信息
-h                  在显示符合样式的那一行之前,不标示该行所属的文件名称
-H                  在显示符合样式的那一行之前,表示该行所属的文件名称
-G                  将样式视为普通的表示法来使用
-I                  列出文件内容符和指定样式的文件名称

例子:

# 查找passwd中的root
[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep "USER" /etc/passwd
[root@localhost ~]# grep 'USER' /etc/passwd
[root@localhost ~]# grep whoami /etc/passwd

例子:取两个文件的相同行

[root@localhost Code]# cat a.txt
12
34
56
78
90
[root@localhost Code]# cat b.txt
56
78
90
11
22
33
[root@localhost Code]# grep -f a.txt b.txt
56
78
90

例子:分区利用率最大的值

[root@localhost Code]# df
Filesystem              1K-blocks    Used Available Use% Mounted on
devtmpfs                   914472       0    914472   0% /dev
tmpfs                      931500       0    931500   0% /dev/shm
tmpfs                      931500   10356    921144   2% /run
tmpfs                      931500       0    931500   0% /sys/fs/cgroup
/dev/mapper/centos-root  17811456 4676552  13134904  27% /
/dev/sda1                 1038336  189120    849216  19% /boot
tmpfs                      186304      12    186292   1% /run/user/42
tmpfs                      186304       0    186304   0% /run/user/0

[root@localhost Code]# df|grep '^/dev/'
/dev/mapper/centos-root  17811456 4676552  13134904  27% /
/dev/sda1                 1038336  189120    849216  19% /boot
[root@localhost Code]# df|grep '^/dev/'|tr -s " " %
/dev/mapper/centos-root%17811456%4676552%13134904%27%/
/dev/sda1%1038336%189120%849216%19%/boot
[root@localhost Code]# df|grep '^/dev/'|tr -s " " %|cut -d% -f5
27
19
[root@localhost Code]# df|grep '^/dev/'|tr -s " " %|cut -d% -f5|sort -n
19
27
[root@localhost Code]# df|grep '^/dev/'|tr -s " " %|cut -d% -f5|sort -n|tail -1
27
[root@localhost Code]# df|grep '^/dev/'|grep -oE '\<[0-9].{,3}%'
27%
19%
[root@localhost Code]# df|grep '^/dev/'|grep -oE '\<[0-9].{,3}%'|tr -d '%'
27
19
[root@localhost Code]# df|grep '^/dev/'|grep -oE '\<[0-9].{,3}%'|tr -d '%'|sort -nr
27
19
[root@localhost Code]# df|grep '^/dev/'|grep -oE '\<[0-9].{,3}%'|tr -d '%'|sort -nr |head -n1
27
[root@localhost Code]# df|grep '^/dev/'|grep -oE '\<[0-9]{,3}%'
27%
19%
[root@localhost Code]# df|grep '^/dev/'|grep -oE '\<[0-9]{,3}%'|grep -Eo '[0-9]+'
27
19
[root@localhost Code]# df|grep '^/dev/'|grep -oE '\<[0-9]{,3}%'|grep -Eo '[0-9]+'|sort -nr
27
19
[root@localhost Code]# df|grep '^/dev/'|grep -oE '\<[0-9]{,3}%'|grep -Eo '[0-9]+'|sort -nr|head -n1
27

例子:查找文件名中包含hello的文件中不包含hello的行。

[root@localhost Code]# grep -v hello *hel*
world
123
456
789
[root@localhost Code]# grep -v hello *hello*
world
123
456
789
[root@localhost Code]# grep -v world *hello*
hello
123
456
789
[root@localhost Code]# cat hello.txt
hello
world
123
456
789

例子:显示grep的版本信息

[root@localhost Code]# grep -V
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
[root@localhost Code]# grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.

例子:

[root@localhost Code]# cat hello.txt
hello
world
123
456
789
[root@localhost Code]# grep -I xyz hello.txt
[root@localhost Code]# grep -I hello hello.txt
hello
[root@localhost Code]# grep -I 111 hello.txt
[root@localhost Code]# grep -I 1 hello.txt
123
[root@localhost Code]# grep  1 hello.txt
123
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。