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