shell特殊符号cut命令sort_wc_uniq命令 tee_tr_split命令 shell特殊符号下

原创
2018/04/25 09:44
阅读数 424

cut sort wc uniq tee tr split命令

• cut 分割,-d 分隔符  -f 指定段号   -c 指定第几个字符

cut -d ":" -f 1 /etc/passwd 截取/etc/passwd文件中以:分割的第一段

cut -d ":" -f 2,4 /etc/paaswd 截取/etc/passwd文件中以:分割的第一段

cut -d ":" -f 1-3 /etc/passwd 截取/etc/passwd文件中以:分割的1到3段

head -n 3 /etc/passwd |cut -d":" -f 1 /etc/passwd 的前三行截图第一段

cut -c 6 /etc/passwd 提取每行的第六个字符

cut -c 1-8 /etc/passwd 提取每行的前八个字符

• sort 排序, -n 以数字排序 -r 反序  -u 去重复 -t 分隔符 -kn1/-kn1,n2

sort /etc/passwd sort不加任何选项,则从首字符向后,依次按ASCII码值进行比较,

最后将它们按升序输出。

head -n 5 /etc/passwd |sort -t: -k3 -n

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

-t后面跟分割符,-k后面跟数字,表示第几个区域的字符串排序,-n则表示使用纯数字排序。

head -n5 /etc/passwd | sort -t: -k3,5 -r

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

root:x:0:0:root:/root:/bin/bash

-k3,5表示从第3到第5区域间的字符串排序,-r表示反向排序。

如果把-nu一起使用,sort会把文档中的字母看成0

[root@localhost ~]# cut -d: -f1 /etc/passwd |sort -n -u

root

就只剩第一行了,因为它把所有的字符串都看成是0了

• wc -l 统计行数 -m 统计字符数 -w 统计词 -c显示Bytes大小 -L显示长度最长的行

[root@localhost ~]# cat file

123

abc

[root@localhost ~]# cat -A file

123$

abc$

[root@localhost ~]# wc -l file

2 file

[root@localhost ~]# wc -c file

8 file

[root@localhost ~]# wc -m file

8 file

[root@localhost ~]# wc -w file

2 file

-m统计字符时,每行末尾的换行符$也会统计

-w统计词 以空格为分割符计算

• uniq 去重, -c统计行数

uniq去重前提是先排序,相同的行不在一起的话不生效

常用格式:

sort file |uniq

sort file |uniq -c

[root@localhost ~]# cat 123

12

ab

12

a

[root@localhost ~]# uniq 123

12

ab

12

a

[root@localhost ~]# sort 123 |uniq

12

a

ab

[root@localhost ~]# sort 123 |uniq -c

2 12

1 a

1 ab

[root@localhost ~]#

• tee 和>类似,重定向的同时还在屏幕显示; -a 追加选项

[root@localhost ~]# sort 123 |uniq -c |tee a.txt

2 12

1 a

1 ab

[root@localhost ~]# cat a.txt

2 12

1 a

1 ab

[root@localhost ~]# sort 123 |uniq -c |tee -a a.txt

2 12

1 a

1 ab

[root@localhost ~]# cat a.txt

2 12

1 a

1 ab

2 12

1 a

1 ab

[root@localhost ~]#

• tr 替换字符,tr 'a' 'b',大小写替换tr '[a-z]' '[A-Z]'

[root@localhost ~]# echo "gavin" |tr 'g' 'G'

Gavin

• split 切割,-b大小(默认单位字节),-l行数

split -b 100 file 按100字节来切割

split -b 10k file 按10k大小来切割

split -b 1M file 按1M大小来切割

split -l 100 file 按每100行来切割

split -l 100 file f 指定切割后的文件名字以f开头

split -a 指定用于形成输出名称文件后缀部分的字母数

split -d 用数字代替字母后缀

[root@localhost gavin]# ll -h file

-rw-r--r--. 1 root root 13M 6月 30 20:04 file

[root@localhost gavin]# split -b 1M file f

[root@localhost gavin]# ls

faa fab fac fad fae faf fag fah fai faj fak fal fam file

[root@localhost gavin]# split -l 1000 file file_

[root@localhost gavin]# ls

file file_aa file_ab file_ac file_ad file_ae file_af

特殊符号:

• * 任意个任意字符

• ? 任意一个字符

• # 注释字符

• \ 脱义字符

• | 管道符

• $ 变量前缀,!$组合,正则里面表示行尾

• ;多条命令写到一行,用分号分割

• ~ 用户家目录,后面正则表达式表示匹配符

• & 放到命令后面,会把命令丢到后台

• > >> 2> 2>> &>

• [ ] 指定字符中的一个,[0-9],[a-zA-Z],[abc]

• || 和 && ,用于命令之间

|| 或者 前面命令执行成功不在执行第二条命令;前面命令执行不成功时执行后面命令;

&& 并且 前面命令执行成功才会执行后面的命令,否则不执行后面命令

; 不管前面命令执行成功与否后面命令都执行;

[root@localhost gavin]# [ -d gavin ] || mkdir gavin

[root@localhost gavin]# ls

gavin

[ -d gavin ] 查看是否有gavin这个目录,没有时创建gavin;

[root@localhost gavin]# [ -d gavin ] && mkdir gavin1

[root@localhost gavin]# ls

gavin gavin1

[ -d gavin ] 查看是否有gavin这个目录,有时创建gavin1;

 

展开阅读全文
打赏
0
5 收藏
分享
加载中
更多评论
打赏
0 评论
5 收藏
0
分享
返回顶部
顶部