文本处理三剑客 – grep


一剑客 grep

grep:Global search REgular expression and Print out the line

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行

模式:由正则表达式字符及文本字符所编写的过滤条件

# 格式
grep [OPTION]... PATTERN [FILE]...

# 选项
--color=auto:对匹配到的文本着色显示
-m num:匹配num次后停止
-v:显示不被pattern匹配到的行,即取反
-i:忽略字符大小写
-n:显示匹配的行号
-c:统计匹配的行数
-o:仅显示匹配到的字符串
-q:静默模式,不输出任何信息
-A num:after, 打印匹配行的后num行
-B num:before,打印匹配行的前num行
-C num:context, 打印匹配行前后各num行
-e:实现多个选项间的逻辑or关系
-w:匹配整个单词
-E:使用ERE,相当于egrep
-F:不支持正则表达式,相当于fgrep
-P:支持Perl格式的正则表达式
-f file:根据模式文件处理
-r:递归目录,但不处理软链接
-R:递归目录,但处理软链接

范例

1. 取两个文件的相同行

[root@linux ~]# cat test1.txt 
a
b
1
c
[root@linux ~]# cat test2.txt 
b
e
f
c
1
2
[root@linux ~]# grep -f test1.txt test2.txt 
b
c
1

[root@linux ~]# cat test1.txt test2.txt | sort | uniq -d
1
b
c

2. 分区利用率最大值

[root@linux ~]# df
文件系统                1K-块    已用      可用 已用% 挂载点
devtmpfs               966744       0    966744    0% /dev
tmpfs                  996036       0    996036    0% /dev/shm
tmpfs                  996036    9356    986680    1% /run
tmpfs                  996036       0    996036    0% /sys/fs/cgroup
/dev/mapper/rl-root  73364480 6131808  67232672    9% /
/dev/mapper/rl-home 133071376  960932 132110444    1% /home
/dev/nvme0n1p1        1038336  298156    740180   29% /boot
tmpfs                  199204      12    199192    1% /run/user/42
tmpfs                  199204       0    199204    0% /run/user/0
[root@linux ~]# df | tail -n +2 | tr -s ' ' | cut -d ' ' -f 5 | sort -nr | tr -d % | head -3
29
9
1

[root@linux ~]# df | grep '^/dev' | tr -s ' ' % | cut -d % -f 5 | sort -nr
29
9
1

3. 过滤注释和空行

[root@linux ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Mon Jul 11 21:02:24 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rl-root     /                       xfs     defaults        0 0
UUID=515800b1-a654-40b9-9067-a9892ddeb62d /boot                   xfs     defaults        0 0
/dev/mapper/rl-home     /home                   xfs     defaults        0 0
/dev/mapper/rl-swap     none                    swap    defaults        0 0
[root@linux ~]# cat /etc/fstab | grep -Ev '^#|^$'
/dev/mapper/rl-root     /                       xfs     defaults        0 0
UUID=515800b1-a654-40b9-9067-a9892ddeb62d /boot                   xfs     defaults        0 0
/dev/mapper/rl-home     /home                   xfs     defaults        0 0
/dev/mapper/rl-swap     none                    swap    defaults        0 0

面试题:年龄总和

[root@linux ~]# cat age.txt 
xiaoming=20
xiaohong=18
xiaoqiang=22
[root@linux ~]# cat age.txt | grep -Eo '[0-9]+' | paste -s -d+ | bc
60

原创文章,作者:sunnyman218,如若转载,请注明出处:https://blog.ytso.com/275236.html

(0)
上一篇 2022年7月18日
下一篇 2022年7月18日

相关推荐

发表回复

登录后才能评论