shell特殊符_cut截取,sort排序,shell特殊符號

cut 命令

cut做用:截取字符串

用法以下:cat /etc/passwd |head -2 |cut -d ":" -f 1,2,4

  • 在管道符後面進行截取前面命令的輸出。html

  • cut -d " " 指定分割條件,好比 ":" ,就是以:進行分割。每到一個:就是一段。linux

  • -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排序)http://www.javashuo.com/article/p-tyuagcmx-ee.htmlshell

  • 新建一個文本,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

結果發現是隻有相鄰的重複項纔會去重,因此在去重的時候最好先排序。bash

[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: 沒有那個文件或目錄

擴展學習:

相關文章
相關標籤/搜索