2017.11.17 五周第五次课

8.10 shell特殊符号cut命令

语法: cut -d '分隔字符' [-cf] n

-d 后面指定分隔符,单引号引起来,必须是单个字符

-f 指定第几段,可以跟多个数字,用逗号隔开

-c 后面只有一个数字,表示截取第几个字符

输入图片说明

-d 后面跟分隔字符,这里使用冒号:作为分隔字符,-f 1 就是截取第一段,-f 和 1直接的空格可有可无。-d 和 -c 不能同时使用

[root@thinkpad tmp]# cut -d ':' -f 3 passwd 【-d 后面直接加分隔符,不用空格】

[root@thinkpad tmp]# cut -d:-f 3 passwd 【空格之后用单引号引起来】

[root@thinkpad tmp]# cut -d: -f 3,6,5 passwd 【截取两段的时候,用逗号隔开,数字顺序可以颠倒,但显示的结果以实际为准,比如-f 3,6,5 显示的结果是 -f 3,5,6 】

#echo '1 2 3' > 1.txt

#cut -d ' ' -f 2 1.txt 【分隔符是空格,需要指定空格,用单引号引起来】

所以,建议-d后面跟单引号,避免出现问题。养成习惯。

-c 截取字符,包括字母,数字,符号

输入图片说明

-c 后面跟一个数字,表示截取第几个字符

-c 后面跟一个区间

-c 后面跟几个数字,表示截取多个

[root@thinkpad tmp]# cut -c1,2,5,9 passwd

[root@thinkpad tmp]# cut -c 6-10 passwd

8.11 sort_wc_uniq命令

sort [-t 分隔符] [-kn1,n2] [-nru]

此处n1<n2

-t 后跟分隔符,作用和cut -d 一样,

-n 使用纯数字排序,只针对数字,如果是字母,会按0处理

-r 反向排序

-u 去重复

-kn1,n2 由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序,cut区间用减号表示,sort用逗号,表示。

NOTE: -t 和 -k 要在一起用;sort不加任何选项,按照ACSII进行排序,并非单纯的数字或者字母

[root@localhost ~]# head -n5 /etc/passwd

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

sort不加任何选项,从首字母排序,按ASCII码值比较,升序输出。

[root@localhost ~]# head -n5 /etc/passwd |sort

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

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

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

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

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

-t 跟分隔符, -k 后面跟数字,表示按照第几个字符串排序;-n表示使用纯数字排序

[root@localhost ~]# head -n5 /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

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

第三段到第五段,先排第三段,如果第三段中有多行一样,那么就按第四段排,如果第四段也有多行一样,就按第五段排。

[root@localhost ~]# head -n5 /etc/passwd |sort -t: -k3,5

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

[root@localhost ~]# head -n5 /tmp/passwd |sort -t: -k3 -n

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

-n 和 -u 一起用,sort会吧文档中的字母看成是0

#echo

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

root

#vim 1.txt

1

1

2

2

3

3

4

4

ab

bc

ef

#sort -n 1.txt 【数字大小排序,字母按0排序,若文档没有数字,所有字符会看成0】

ab

bc

ef

1

1

2

2

3

3

4

4

#sort -u 1.txt 【去重复,并不能知道重复了多少,哪里重复】

1

2

3

4

ab

bc

ef

#sort -nu 1.txt 【把所有的字母当做0处理,去重复之后显示最上面的一个】

ab

1

2

3

4

NOTE:文档中如果有一行全是标点符号,如果 -n 排序,则会显示在第一行。

,.,.,..,.,...

ab

bc

ef

1

1

下面省略

排序以后直接重定向>大湿兄

sort 1.txt -o 1.txt

sort 1.txt |tee 1.txt

8.12 tee_tr_split命令

tr 命令

用于替换字符,但是只是显示在屏幕上,并不会真正的替换文本文档本身。

-d 删除某个字符

-s 把重复的字符去掉

tr '[a-z]' '[A-Z]' 小写变大写

输入图片说明

替换一个字符

输入图片说明

#echo “abcdefg" |tr 'abcdefg' 'ABCD123' 【前后一一对应要替换的字符】

#echo "abcddsfd" |tr 'ds' 'DS'

abcDDSfD 【并没有顺序,会被识别成单个字符】

tr左边和右边如果长度不匹配时。

  1. 左边比右边少,首先会一一替换,比如左边为abc, 右边为 1234,这样,a替换为1,b替换为2,c替换为3,右侧的4是多余的

  2. 左边比右边多,首先会一一替换,比如左边为abc,右边为12,这样,a替换为1,b替换为2,c替换为2,也就是说多出来的字符全部替换为右侧最后面那个字符。

使用重定向命令,可以使得到的结果定向到文档中

[root@thinkpad tmp]# cat 1.txt |tr [a-z] [A-Z] |tee 1.txt

33333

44444

AA

BB

CC

DD

[root@thinkpad tmp]# cat 1.txt

33333

44444

AA

BB

CC

DD

split 命令 记住-b -l 选项

用于切割文档,

-b 依据大小来分隔文档,单位byte

-b 50m mb大小

-l 依据行数来分隔文档

mkdir split_dir

cd !$

cd split_dir

mv /tmp/passwd /etc/passwd

cp /etc/passwd ./

split -b 500 passwd

ll

total 16

-rw-r--r--. 1 root root 1466 Feb 11 18:46 passwd

-rw-r--r--. 1 root root 500 Feb 11 18:46 xaa

-rw-r--r--. 1 root root 500 Feb 11 18:46 xab

-rw-r--r--. 1 root root 466 Feb 11 18:46 xac

如果split不指定目标文件名,会以xaa,xab....这样的文件名来存取切割后的文件。可以指定目标文件名。

split -b 500 passwd 123

ll

total 28

-rw-r--r--. 1 root root 500 Feb 11 18:49 123aa

-rw-r--r--. 1 root root 500 Feb 11 18:49 123ab

-rw-r--r--. 1 root root 466 Feb 11 18:49 123ac

-rw-r--r--. 1 root root 1466 Feb 11 18:46 passwd

-rw-r--r--. 1 root root 500 Feb 11 18:46 xaa

-rw-r--r--. 1 root root 500 Feb 11 18:46 xab

-rw-r--r--. 1 root root 466 Feb 11 18:46 xac

#split -l 10 passwd

#wc -l

27 passwd

10 xaa

10 xab

7 xac

转载于:https://my.oschina.net/u/3461300/blog/1575846

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值