10月15日任务
8.10 shell特殊符号cut命令
8.11 sort_wc_uniq命令
8.12 tee_tr_split命令
8.13 shell特殊符号下
cut 命令
cut作用:截取字符串
用法如下:cat /etc/passwd |head -2 |cut -d ":" -f 1,2,4
-
在管道符后面进行截取前面命令的输出。
-
cut -d " " 指定分割条件,比如 ":" ,就是以:进行分割。每到一个:就是一段。
-
-f 是指定截取哪一段。后面跟数字几,就是截取几段。如果想1到4段都要。就是-f 1-4
[root@localhost ~]# cat /etc/passwd |head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1
root
bin
[root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2
root:x
bin:x
[root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2,4
root:x:0
bin:x:1
- 还有一种用法是 : -c,指定截取第几位,比如截取etc/passwd 的第四位。
[root@localhost ~]# cat /etc/passwd |head -2 |cut -c 4
t
:
排序命令: sort
用法: sort 加想要查看的文件
排序方式:没有环境变量影响的话,默认按照ASCLL码排序。
Linux sort命令的几个细节问题(sort并未按ASCII排序)https://blog.csdn.net/zenghui08/article/details/7938975
- 新建一个文本,cat内容如下:
[root@localhost ~]# cat 1.txt
43
35
67
907890
hrshs
hsga
agsfh
.,12125
43
&%#@
^$%$
@%#
- 用sort进行排序后内容如下:
[root@localhost ~]# sort 1.txt
^$%$
@%#
&%#@
.,12125
35
43
43
67
907890
agsfh
hrshs
hsga
sort -n 以数字进行排序,其他数字以外的字符都当作为0,排在最前面。
[root@localhost ~]# sort -n 1.txt
^$%$
@%#
&%#@
.,12125
agsfh
hrshs
hsga
35
43
43
67
907890
sort -r 反序显示
sort -t 分隔符,指定段排序(少用)
- -t 用法 :sort -t 指定分隔符 -kn1,n2
wc统计命令
- wc -l 统计行数
[root@localhost ~]# wc -l 1.txt
12 1.txt
- wc -m 统计字符数(包括换行符$)
[root@localhost ~]# wc -m 1.txt
58 1.txt
- wc -w 统计词数
[root@localhost ~]# wc -w 1.txt
12 1.txt
uniq 去重复
- 新建2.txt进行实验。
[root@localhost ~]# cat 2.txt
1111
111
1111
1111
2222
2222
2222
3333
3333
3333
4
5
[root@localhost ~]# unip 2.txt
-bash: unip: 未找到命令
[root@localhost ~]# uniq 2.txt
1111
111
1111
2222
3333
4
5
结果发现是只有相邻的重复项才会去重,所以在去重的时候最好先排序。
[root@localhost ~]# sort 2.txt |uniq
111
1111
2222
3333
4
5
[root@localhost ~]# sort 2.txt |uniq -c
1 111
3 1111
3 2222
3 3333
1 4
1 5
[root@localhost ~]#
tee 和 >类似,重定向的同时还在屏幕显示(需要在前面加上管道符)
- 用法如下:
[root@localhost ~]# sort 2.txt |uniq -c |tee a.txt
1 111
3 1111
3 2222
3 3333
1 4
1 5
[root@localhost ~]# cat a.txt
1 111
3 1111
3 2222
3 3333
1 4
1 5
tee -a 追加并显示内容。
tr 替换字符命令。
- 用法如下:
[root@localhost ~]# echo "aminglinux" |tr 'a' 'A'
Aminglinux
[root@localhost ~]# echo "aminglinux" |tr '[anx]' '[ANX]'
AmiNgliNuX
[root@localhost ~]# echo "aminglinux" |tr '[a-z]' '[A-Z]'
AMINGLINUX
split 切割命令
用法:split -b 100M bigfile 切割bigfile文件,以文件大小大小进行切割,每100M切割一份
- -b选项不指定大小的话默认大小是字节。
用法:split -l 1000 bigfile 切割bigfile文件,以行数多少进行切割,每1000行切割一份
- 先做一个大文件准备切割。
[root@localhost ~]# find /etc/ -type f -name "*conf" -exec cat {} >> aa.txt \;
[root@localhost ~]# du -sh aa.txt
160K aa.txt
- 然后用split -b 切割成1k每份。切割之后ls查看。
[root@localhost ~]# split -b 1000 aa.txt
[root@localhost ~]# ls
1.txt xab xah xan xat xaz xbf xbl xbr xbx xcd xcj xcp xcv xdb xdh xdn xdt xdz xef xel xer xex xfd xfj xfp xfv xgb
2.txt xac xai xao xau xba xbg xbm xbs xby xce xck xcq xcw xdc xdi xdo xdu xea xeg xem xes xey xfe xfk xfq xfw xgc
aa.txt xad xaj xap xav xbb xbh xbn xbt xbz xcf xcl xcr xcx xdd xdj xdp xdv xeb xeh xen xet xez xff xfl xfr xfx xgd
anaconda-ks.cfg xae xak xaq xaw xbc xbi xbo xbu xca xcg xcm xcs xcy xde xdk xdq xdw xec xei xeo xeu xfa xfg xfm xfs xfy
a.txt xaf xal xar xax xbd xbj xbp xbv xcb xch xcn xct xcz xdf xdl xdr xdx xed xej xep xev xfb xfh xfn xft xfz
xaa xag xam xas xay xbe xbk xbq xbw xcc xci xco xcu xda xdg xdm xds xdy xee xek xeq xew xfc xfi
- “split -b 大小 文件 切割后文件名” 指定切割后文件命前缀。
[root@localhost ~]# split -b 1000 aa.txt aaa.
[root@localhost ~]# ls
1.txt aaa.ai aaa.as aaa.bc aaa.bm aaa.bw aaa.cg aaa.cq aaa.da aaa.dk aaa.du aaa.ee aaa.eo aaa.ey aaa.fi aaa.fs aaa.gc
2.txt aaa.aj aaa.at aaa.bd aaa.bn aaa.bx aaa.ch aaa.cr aaa.db aaa.dl aaa.dv aaa.ef aaa.ep aaa.ez aaa.fj aaa.ft aaa.gd
aaa.aa aaa.ak aaa.au aaa.be aaa.bo aaa.by aaa.ci aaa.cs aaa.dc aaa.dm aaa.dw aaa.eg aaa.eq aaa.fa aaa.fk aaa.fu aa.txt
aaa.ab aaa.al aaa.av aaa.bf aaa.bp aaa.bz aaa.cj aaa.ct aaa.dd aaa.dn aaa.dx aaa.eh aaa.er aaa.fb aaa.fl aaa.fv anaconda-ks.cfg
aaa.ac aaa.am aaa.aw aaa.bg aaa.bq aaa.ca aaa.ck aaa.cu aaa.de aaa.do aaa.dy aaa.ei aaa.es aaa.fc aaa.fm aaa.fw a.txt
aaa.ad aaa.an aaa.ax aaa.bh aaa.br aaa.cb aaa.cl aaa.cv aaa.df aaa.dp aaa.dz aaa.ej aaa.et aaa.fd aaa.fn aaa.fx
aaa.ae aaa.ao aaa.ay aaa.bi aaa.bs aaa.cc aaa.cm aaa.cw aaa.dg aaa.dq aaa.ea aaa.ek aaa.eu aaa.fe aaa.fo aaa.fy
aaa.af aaa.ap aaa.az aaa.bj aaa.bt aaa.cd aaa.cn aaa.cx aaa.dh aaa.dr aaa.eb aaa.el aaa.ev aaa.ff aaa.fp aaa.fz
aaa.ag aaa.aq aaa.ba aaa.bk aaa.bu aaa.ce aaa.co aaa.cy aaa.di aaa.ds aaa.ec aaa.em aaa.ew aaa.fg aaa.fq aaa.ga
aaa.ah aaa.ar aaa.bb aaa.bl aaa.bv aaa.cf aaa.cp aaa.cz aaa.dj aaa.dt aaa.ed aaa.en aaa.ex aaa.fh aaa.fr aaa.gb
shell 特殊符号
$变量前缀,!$组合,正则里面表示行尾
; 多条命令写到一行,用分号分割
~ 用户家目录,后面正则表达式表示匹配符
& 放到命令后面,会把命令丢到后台
> >> 2> 2>> &>
[] 指定字符中的一个
||和&&,用于命令之间
- || :如果||前面的命令提示成功,||后面的命令就不会执行,如果前面命令执行不成功,才会执行||后面的命令。
[root@localhost ~]# ls 1a.txt || wc -l 1.txt
ls: 无法访问1a.txt: 没有那个文件或目录
25 1.txt
[root@localhost ~]# ls 1.txt || wc -l 1.txt
1.txt
- &&:如果前面的命令执行成功后,才会执行后面的命令,如果前面命令错了,就不会执行后面的命令了,
[root@localhost ~]# ls 1.txt && wc -l 1.txt
1.txt
25 1.txt
[root@localhost ~]# ls 1a.txt && wc -l 1.txt
ls: 无法访问1a.txt: 没有那个文件或目录