1 cut命令
1.1 作用
- 显示行中的指定部分
- 删除文件中的指定字段
1.2 语法
cut [OPTION]… [FILE]…
[root@yr d01]# cat test.txt
# 用tab分隔,制表符是字段或列默认的界定面
No Name Mark Percernt
tom 69 91
jack 71 87
alex 68 98
[root@yr d01]# cat test2.txt
No;Name;Mark;Percent
tom;69;91
jack;71;87
alex;68;98
- -f 提取指定字段和多列字段
[root@yr d01]# cut -f1 test.txt # 提取第一列
No
tom
jack
alex
[root@yr d01]# cut -f1,3 test.txt # 提取第一和第三列
No Mark
tom 91
jack 87
alex 98
-n
- –complement (补集)补足显示被选择的字节、字符或字段
[root@yr d01]# cut -f1,3 test.txt --complement
Name Percernt
69
71
68
- -b 按字节(一个汉字是两个字节,一个英文一个字节)选取,忽略多字节字符边界,除非也指定了-n标志
- -n 与"-b"连用,不分割多字节字符
- -c 仅显示行中指定范围的字符
[root@yr d01]# cut -c3 test.txt # 只显示第三个字符
m
c
e
- -d 指定字段的分隔符,默认的字段分隔符为"TAB"
[root@yr d01]# cut -f1 -d" " test.txt
No
tom
jack
alex
[root@yr d01]# cut -f1 -d";" test2.txt
No
tom
jack
alex
[root@yr d01]# cut -f1 -d" " test2.txt
No;Name;Mark;Percent
tom;69;91
jack;71;87
alex;68;98
- –help 显示指令的帮助信息
- –version 显示指令的版本信息
将一串字符作为列来显示:
- N- 从第N个字节、字符、字段到结尾
[root@yr d01]# cut -f2- test.txt # 第2列到最后一列
Name Mark Percernt
69 91
71 87
68 98
- N-M 第N到第M个(含M)字节、字符、字段
[root@yr d01]# cut -f1-3 test.txt # 第1-3列
No Name Mark
tom 69 91
jack 71 87
alex 68 98
- -M 第1到第M个(含M)字节、字符、字段
[root@yr d01]# cut -f-3 test2.txt # 第1-3列
No Name Mark
tom 69 91
jack 71 87
alex 68 98
- -b:字节
- -c:字符
- -f:字段
2 sort命令
[root@yr d01]# sort num.txt
2
23
26
4
6
64
7
9
[root@yr d01]# sort eng.txt
five
four
one
one
one
three
two
- -b 忽略每行前面开始出的空格字符。
- -c 检查文件是否已经按照顺序排序。
- -d 排序时,处理理英文字母、数字及空格字符外,忽略其他的字符。
- -f 排序时,将小写字母视为大写字⺟母。
- -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
- -m 将几个排序好的文件进行合并。
- -M 将前面3个字母依照月份的缩写进行排序。识别月份的前三个英文字母
[root@yr d01]# sort -M month.txt
feb
mar
apr
jul
sep
- -n 依照数值的大小排序。
[root@yr d01]# sort -n num.txt
2
4
6
7
9
23
26
64
查看/root下所有文件大小,并按文件大小排序
[root@yr ~]# du -sh * | sort -n # 查看文件及目录大小 du -sh *
- -o<输出文件> 将排序后的结果存入指定的文件。
- -r 以相反的顺序来排序。
[root@yr d01]# sort -nr num.txt
[root@yr d01]# sort -n -r num.txt
- +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
- -u unic,输出行中去除重复行
- -t<分隔字符> 指定排序时所⽤用的栏位分隔字符。
- -k 指定了间隔符后,可以用-k来指定列数
可以加两个-k
[root@yr d01]# sort -n -k 2 -t '-' date.txt # 以-为分隔符将第2列以数值大小排列
[root@yr d01]# sort -n -k 3 -t '-' date.txt # 以-为分隔符将第3列以数值大小排列
[root@yr d01]# sort -n -k 2 -k 3 -t '-' date.txt # 以-为分隔符将第2列和第3列以数值大小排列
- –help 显示帮助。
- –version 显示版本信息
3 grep命令
文本搜索工具,并把配的行输出出来,查找众多数据中的一行,而数据又埋藏在文件或某一行的中间位置
找出包含root的行
[root@yr ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
- –color=auto 输出包含bin的行,并且高亮显示
[root@yr ~]# cat /etc/passwd > /root/d01/passwd.txt
[root@yr d01]# grep --color=auto bin /root/d01/passwd.txt
- -v 反向查找, 输出包含不匹配关键字的行
[root@yr d01]# grep --color=auto 6 num.txt -v
7
9
23
4
2
[root@yr d01]# grep --color=auto 6 num.txt
6
26
64
- -n 显示行号
[root@yr d01]# grep --color=auto 6 num.txt -n
1:6
4:26
5:64
也可以-nv 或者-n -v
- -c 统计匹配的行,总个数
[root@yr d01]# grep --color=auto 6 num.txt -c
3
- -e 匹配多个关键字
[root@yr d01]# grep --color=auto -e 6 -e 2 num.txt # 6和2高亮
6
26
64
23
2
- -i 不区分大小写字符
[root@yr d01]# grep --color=auto -i "lap" t.txt # lap和LAP高亮
LAPTOP
laptop
laptop
单引号、双引号、没有引号都可以
否则默认的是只返回区分大小写
[root@yr d01]# grep --color=auto lap t.txt
laptop
laptop
- -A{num} 返回能匹配的后n行,不但能匹配到指定的字符那一行。而且字符后面所指定的n行也能显示出来。
[root@yr d01]# grep --color=auto root passwd.txt -n -A2
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
12:operator:x:11:0:operator:/root:/sbin/nologin
13-games:x:12:100:games:/usr/games:/sbin/nologin
14-gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
- -B{num} 不但能匹配到指定的字符那一行。而且字符前面所指定的n行也能显示出来。
-
-C | -a | -b:不但能匹配到指定的字符那一行。而且字符前后所指定的n行也能显示出来。
-
. 一个.代表任意单个字符,指的就是一个点代表1个字符,符号也行。
-
*: 匹配任意长度的任意字符
- [ ]:指定范围内的任意单个字符。这个括号中指定的字符都能匹配出来,匹配范围广。
-
[^]
-
[[:digit:]] 输出所有带数字的行
-
[[:lower:]] 表示小写字母。
-
[[:upper:]] 表示大写字母。
-
[[:alpha:]] 表示全部的大写和小写字母。
-
[[:alnum:]] 表示全部的字母和数字。
-
[[:space:]] 表示空格符。
-
[[:punct:]] 表示标点符号。
设置函数:
为了方便我把grep --color=auto定义一个别名,别名为cgrep。方便使用。后续直接使用cgrep 就能显示颜色了。
编辑 vi.bash_profile文件,在下面添加alias grepc=“grep --color=auto”
4 awk命令
awk是列处理器
[root@yr ~]# ps -ef | head -20 > ps.txt
- print 是awk打印指定内容的主要命令
输出所有文件内容
[root@yr ~]# awk '{print}' ps.txt
[root@yr ~]# awk '{print $0}' ps.txt
- 输出第一列:
awk '{print $1}' ps.txt
-
awk ‘{print $1,$3}’ ps.txt 多列之间用空格分开输出
输出第三列和第二列
相连输出:
-
awk ‘{print $1 " – " $3}’ ps.txt 在第一列和第三列之间手动添加自定义分隔
用双引号
输出相同个数的a行,一行只有一个a字母。(文件有多少行就输出多少行)
-
-F 指定分隔符
-
$1 指指定分隔符后,第一个字段,$3第三个字段, \t是制表符
一个或多个连续的空格或制表符看做一个定界符,即多个空格看做一个空格
awk -F":" '{print $1}' /etc/passwd
awk -F":" '{print $1 $3}' /etc/passwd //$1与$3相连输出,不分隔
awk -F":" '{print $1,$3}' /etc/passwd //多了一个逗号,$1与$3使用空格分隔
awk -F":" '{print $1 " " $3}' /etc/passwd //$1与$3之间手动添加空格分隔
awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd //自定义输出
awk -F: '{print NF}' /etc/passwd //显示每行有多少字段
awk -F: '{print $NF}' /etc/passwd //将每行第NF个字段的值打印出来
awk -F: 'NF==4 {print }' /etc/passwd //显示只有4个字段的行
awk -F: 'NF>2{print $0}' /etc/passwd //显示每行字段数量大于2的行
awk '{print NR,$0}' /etc/passwd //输出每行的行号
awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd //依次打印行号,字段数,最后字段值,制表符,每行内容
awk -F: 'NR==5{print}' /etc/passwd //显示第5行
awk -F: 'NR==5 || NR==6{print}' /etc/passwd //显示第5行和第6行
route -n|awk 'NR!=1{print}' //不显示第一行