shell-文本处理

本文详细介绍了shell中的grep和egrep命令,包括它们的参数和元字符用法,如忽略大小写、条件取反、统计匹配行数等。此外,还讲解了cut命令用于处理和提取文本,并探讨了sort和uniq命令在排序和处理重复行中的应用。通过实例展示了如何获取主机IP和检测网络状态。
摘要由CSDN通过智能技术生成

1.grep,egrep

egrep是grep的扩展
grep
-i 忽略字母大小写
-v 条件取反
-c 统计匹配行数
-q 静默,无任何输出
-n 显示匹配结果所在的行号

-i:
在这里插入图片描述
-v:

[root@desktop8 脚本]# grep -v 'sbin' /etc/passwd
root:x:0:0:root:/root:/bin/bash
student:x:1000:1000:Student User:/home/student:/bin/bash
liming:x:1001:1001::/home/liming:/bin/bash
apple:x:1002:1002::/home/apple:/bin/bash
hellow:x:1003:1003::/home/hellow:/bin/bash
oo:x:1004:1004::/home/oo:/bin/bash

-c:

[root@desktop8 脚本]# grep -cv 'sbin' /etc/passwd
6

-q:
在这里插入图片描述
-n:
在这里插入图片描述
2.基本元字符
-m10表示只输出匹配的前十行
在这里插入图片描述
$ 表示以什么结尾
例如:nologin$表示以nologin结尾

[root@desktop8 脚本]# grep -c 'nologin$' /etc/passwd
37

^表示以什么开头
例如:^root表示以root开头

[root@desktop8 脚本]# grep '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash

过滤非空行,过滤空行
egrep ‘.’ filename 过滤非空行
egrep -v ‘.’ filename 过滤空行
egrep ‘^$’ filename 过滤空行
在这里插入图片描述
+表示匹配多个
例如 f++表示输出f,ff,fff…f至少出现一次
+号只能用于egrep不能用于grep

[root@desktop8 脚本]# vim fff
[root@desktop8 脚本]# cat fff 
asdsafffasdasdfasdsadasdgddddfff
asdasdsafasdsadasdasdasdfffffff
asdasdas
dasdsadsaff
[root@desktop8 脚本]# grep 'f+' fff 
[root@desktop8 脚本]# egrep 'f+' fff 
asdsafffasdasdfasdsadasdgddddfff
asdasdsafasdsadasdasdasdfffffff
dasdsadsaff

?
例如:hello(world)? 表示匹配hello和helloworld,只匹配hello后面的一个world
同样?也只适用于egrep,grep不可以使用
在这里插入图片描述
匹配任意*
例如: ‘*home’表示匹配所有含有home的行
*也只适用于egrep,不能被grep使用
在这里插入图片描述
{}
例如‘(world){2}’表示只匹配两次world在一块的行
'(world){1,3}'表示匹配1到3次world在一块的行
'(world){3,}'表示匹配三次以上world在一块的行
也不能被grep使用
在这里插入图片描述
在这里插入图片描述
'(world)[ab]'表示匹配在world之后出现a或b的情况
在这里插入图片描述
'[A-Z]'匹配所有的大写字母
在这里插入图片描述
3.cut命令
cut -d 指定分隔符
cut -d : -f 1-3 /etc/passwd 指定分隔符为:显示1-3列
在这里插入图片描述
cut -c 1,4 /etc/passwd 显示第一和第四个字符
在这里插入图片描述
练习:获取主机IP
cut会记录每个空格,在这里用起来不方便,可以用awk,不管多少空格,他都会当成一个分隔符

[root@desktop8 脚本]# ifconfig eth0 | grep 'netmask' | awk '{print $2}'
172.25.254.108

练习:检测网络

[root@desktop8 脚本]# vim test.sh
[root@desktop8 脚本]# cat test.sh 
#!/bin/bash
ping -c1 -w1 172.25.254.$1 &> /dev/null && echo "172.25.254.$1 is up" || echo "172.25.254.$1 is down"
[root@desktop8 脚本]# sh test.sh 8
172.25.254.8 is up
[root@desktop8 脚本]# sh test.sh 7
172.25.254.7 is down
[root@desktop8 脚本]# sh test.sh 72
172.25.254.72 is down

4.sort命令
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
sort -n 纯数字排序
sort -r 倒序
sort -u 去掉重复项排序
sort -o 输出到指定的文件中
sort -t 指定分隔符
sort -k 指定要排序的列

[root@desktop8 脚本]# cat test 
3
6
5
7
8
3
3
5
6
7
7
4
42
11
342
4576

[root@desktop8 脚本]# sort test 

11
3
3
3
342
4
42
4576
5
5
6
6
7
7
7
8
[root@desktop8 脚本]# sort -n test 

3
3
3
4
5
5
6
6
7
7
7
8
11
42
342
4576
[root@desktop8 脚本]# sort -un test 

3
4
5
6
7
8
11
42
342
4576
[root@desktop8 脚本]# sort -nr test 
4576
342
42
11
8
7
7
7
6
6
5
5
4
3
3
3
[root@desktop8 脚本]# cat test 
3:213:213
6:324:32
5:4:6
7:5:8
8:3:23
3:7:78
3:9:98
5:89:7
6:5:78
7:1:21
7:2:12
4:3:34
42:4:43
11:231:5435
342:345:567
4576:567:345
[root@desktop8 脚本]# sort -nt : -k 2 test -o file
[root@desktop8 脚本]# cat file 
7:1:21
7:2:12
4:3:34
8:3:23
42:4:43
5:4:6
6:5:78
7:5:8
3:7:78
3:9:98
5:89:7
3:213:213
11:231:5435
6:324:32
342:345:567

5.uniq命令:对重复字符处理
uniq -u 显示唯一的行
uniq -d 显示重复的行
uniq -c 每行显示一次并统计重复次数

[root@desktop8 脚本]# cat test 
3
6
5
7
8
3
3
5
6
7
7
4
4
1
3
4
[root@desktop8 脚本]# sort -n test | uniq -u
1
8
[root@desktop8 脚本]# sort -n test | uniq -d
3
4
5
6
7
[root@desktop8 脚本]# sort -n test | uniq -c
      1 1
      4 3
      3 4
      2 5
      2 6
      3 7
      1 8

练习:将/tmp目录中的文件取出最大的输出

[root@desktop8 /]# ls -Sl /tmp/ | head -2 | awk '{print $9}'

yum_save_tx.2018-12-16.21-06.iqhXRO.yumtx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值