shell特殊符号cut命令

* *号表示统配字符
? ?表示一个任意字符
# #号注释字符,被注释的内容不会生效
\ \符号表示脱意字符,给特殊符号脱离原有的特殊用法

cut用于分段
cut -d 分割符 -f 过滤字段 /文件
-d 指定分割符,使用逗号分隔可以显示多个字段,如3,6
-f 指定第几列字符
-c 切割区间字符,如3-6区间的字符

[root@localhost tmp]# cat passwd |head -5 |cut -d ":" -f 1      cut截取第一段内容
root
bin
daemon
adm
lp
[root@localhost tmp]# cat passwd |head -5 |cut -d ":" -f 1,2  cut截取第1、2段内容
root:x
bin:x
daemon:x
adm:x
lp:x
[root@localhost tmp]# cat passwd |head -5 |cut -d ":" -f 1-3   cut截取1到3段内容
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4
[root@localhost tmp]# cat passwd |head -5 |cut -d ":" -f 1,3,6    cut截取1、3、6段内容
root:0:/root
bin:1:/bin
daemon:2:/sbin
adm:3:/var/adm
lp:4:/var/spool/lpd

sort_wc_uniq命令

sort排序
sort命令排序
sort默认按从小到大排序
sort 选项 选项 字符
-t 指定分隔符
-i 排序后的内容保存到原文件
-k 指定分割字段,指定字符区间,使用逗号可以分隔输出多个字段,如2,5
-n 按字符大小数字正序排序
-u 去除相同的字段
-r 按字符数字大小反序排序
按ascii码排序,字母和特殊符号在sort中会识别为0,排序到最前面

[root@localhost tmp]# sort passwd 

(
)
[
]
123456
123456
1234566788898
2534535
3254365
34546575
3456465467
3465465465
35436546
4335346
45436546
546547654
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
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

sort -r 反向排序
sort -t 分隔符排序

wc统计命令

[root@localhost tmp]# wc -l passwd     统计行数
26 passwd
[root@localhost tmp]# wc -m passwd    统计字符数
460 passwd 
[root@localhost tmp]# wc -w passwd    统计单词数 
25 passwd

uniq 排序
-c 去除重复的内容,并合计重复的次数,-c去重复不会对不连续的字符统计数量并排序,需要先sort排序后再去重统计

[root@localhost tmp]# sort -n passwd |uniq -c
      1 
      1 (
      1 )
      1 [
      1 ]
      1 adm:x:3:4:adm:/var/adm:/sbin/nologin
      1 bin:x:1:1:bin:/bin:/sbin/nologin
      1 daemon:x:2:2:daemon:/sbin:/sbin/nologin
      1 halt:x:7:0:halt:/sbin:/sbin/halt
      1 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
      1 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
      1 root:x:0:0:root:/root:/bin/bash
      1 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
      1 sync:x:5:0:sync:/sbin:/bin/sync
      2 123456
      1 2534535
      1 3254365
      1 4335346
      4 34546575         去除重复的行并统计出现的次数
      1 35436546

tee_tr_split命令

tee重定向输出到文件并可以显示到屏幕中
tee 重定向
通常重定向:echo "12345" >>1.txt
tee重定向并输出到屏幕显示:echo “12345” |tee 1.txt

[root@localhost tmp]# echo “12345” |tee 1.txt
“12345”

tr替换指定字符
tr替换指定字符

[root@localhost tmp]# echo "hello world" |tr 'hw' 'HW'
Hello World

tr替换全部字符,小写替换为大写

[root@localhost tmp]# echo "hello world" |tr 'a-z' 'A-Z'
HELLO WORLD

split 大文件切割命令
split 分割成1000字节一个文件

[root@localhost tmp]# split -b 1000 a.txt
[root@localhost tmp]#  ls
a.txt  xan  xbb  xbp  xcd  xcr  xdf  xdt  xeh  xev  xfj  xfx  xgl  xgz  xhn  xib  xip  xjd  xjr
xaa    xao  xbc  xbq  xce  xcs  xdg  xdu  xei  xew  xfk  xfy  xgm  xha  xho  xic  xiq  xje  xjs
xab    xap  xbd  xbr  xcf  xct  xdh  xdv  xej  xex  xfl  xfz  xgn  xhb  xhp  xid  xir  xjf  xjt
xac    xaq  xbe  xbs  xcg  xcu  xdi  xdw  xek  xey  xfm  xga  xgo  xhc  xhq  xie  xis  xjg  xju
xad    xar  xbf  xbt  xch  xcv  xdj  xdx  xel  xez  xfn  xgb  xgp  xhd  xhr  xif  xit  xjh  xjv
xae    xas  xbg  xbu  xci  xcw  xdk  xdy  xem  xfa  xfo  xgc  xgq  xhe  xhs  xig  xiu  xji  xjw
xaf    xat  xbh  xbv  xcj  xcx  xdl  xdz  xen  xfb  xfp  xgd  xgr  xhf  xht  xih  xiv  xjj  xjx
xag    xau  xbi  xbw  xck  xcy  xdm  xea  xeo  xfc  xfq  xge  xgs  xhg  xhu  xii  xiw  xjk  xjy
xah    xav  xbj  xbx  xcl  xcz  xdn  xeb  xep  xfd  xfr  xgf  xgt  xhh  xhv  xij  xix  xjl  xjz
xai    xaw  xbk  xby  xcm  xda  xdo  xec  xeq  xfe  xfs  xgg  xgu  xhi  xhw  xik  xiy  xjm  xka
xaj    xax  xbl  xbz  xcn  xdb  xdp  xed  xer  xff  xft  xgh  xgv  xhj  xhx  xil  xiz  xjn
xak    xay  xbm  xca  xco  xdc  xdq  xee  xes  xfg  xfu  xgi  xgw  xhk  xhy  xim  xja  xjo
xal    xaz  xbn  xcb  xcp  xdd  xdr  xef  xet  xfh  xfv  xgj  xgx  xhl  xhz  xin  xjb  xjp
xam    xba  xbo  xcc  xcq  xde  xds  xeg  xeu  xfi  xfw  xgk  xgy  xhm  xia  xio  xjc  xjq
[root@localhost tmp]#  du -sh 
1.3M    
[root@localhost tmp]#  ls
a.txt  xan  xbb  xbp  xcd  xcr  xdf  xdt  xeh  xev  xfj  xfx  xgl  xgz  xhn  xib  xip  xjd  xjr
xaa    xao  xbc  xbq  xce  xcs  xdg  xdu  xei  xew  xfk  xfy  xgm  xha  xho  xic  xiq  xje  xjs
xab    xap  xbd  xbr  xcf  xct  xdh  xdv  xej  xex  xfl  xfz  xgn  xhb  xhp  xid  xir  xjf  xjt
xac    xaq  xbe  xbs  xcg  xcu  xdi  xdw  xek  xey  xfm  xga  xgo  xhc  xhq  xie  xis  xjg  xju
xad    xar  xbf  xbt  xch  xcv  xdj  xdx  xel  xez  xfn  xgb  xgp  xhd  xhr  xif  xit  xjh  xjv
xae    xas  xbg  xbu  xci  xcw  xdk  xdy  xem  xfa  xfo  xgc  xgq  xhe  xhs  xig  xiu  xji  xjw
xaf    xat  xbh  xbv  xcj  xcx  xdl  xdz  xen  xfb  xfp  xgd  xgr  xhf  xht  xih  xiv  xjj  xjx
xag    xau  xbi  xbw  xck  xcy  xdm  xea  xeo  xfc  xfq  xge  xgs  xhg  xhu  xii  xiw  xjk  xjy
xah    xav  xbj  xbx  xcl  xcz  xdn  xeb  xep  xfd  xfr  xgf  xgt  xhh  xhv  xij  xix  xjl  xjz
xai    xaw  xbk  xby  xcm  xda  xdo  xec  xeq  xfe  xfs  xgg  xgu  xhi  xhw  xik  xiy  xjm  xka
xaj    xax  xbl  xbz  xcn  xdb  xdp  xed  xer  xff  xft  xgh  xgv  xhj  xhx  xil  xiz  xjn
xak    xay  xbm  xca  xco  xdc  xdq  xee  xes  xfg  xfu  xgi  xgw  xhk  xhy  xim  xja  xjo
xal    xaz  xbn  xcb  xcp  xdd  xdr  xef  xet  xfh  xfv  xgj  xgx  xhl  xhz  xin  xjb  xjp
xam    xba  xbo  xcc  xcq  xde  xds  xeg  xeu  xfi  xfw  xgk  xgy  xhm  xia  xio  xjc  xjq

指定每个100k split -b (默认大小是字节)

[root@localhost tmp]#  split -b 100k a.txt
[root@localhost tmp]#  ls
a.txt  xaa  xab  xac
[root@localhost tmp]#  du -sh *
256K    a.txt
100K    xaa
100K    xab
56K xac
[root@localhost tmp]#  split -b 100k a.txt  abc
[root@localhost tmp]#  ls
abcaa  abcab  abcac  a.txt
[root@localhost tmp]#  rm -f abc*    指定名字
[root@localhost tmp]#  split -b 100k a.txt  abc.
[root@localhost tmp]# ls
abc.aa  abc.ab  abc.ac  a.txt

除了指定大小之外,还可以指定行 split -l

[root@localhost tmp]#  split -l 1000 a.txt
[root@localhost tmp]#  ls
a.txt  xaa  xab  xac  xad  xae  xaf  xag
[root@localhost tmp]#  wc -l *  查看split切割文件的总行数
  6601 a.txt
  1000 xaa
  1000 xab
  1000 xac
  1000 xad
  1000 xae
  1000 xaf
   601 xag
 13202 总用量

shell特殊符号下

shell中的&&、||
&&:逻辑并;左边命令执行成功,才会执行右边的命令条件
||:逻辑或;左边的命令条件不成功执行,才会执行右边的命令
; 逻辑与;:左边命令无论是否成功执行,都会执行右边的命令条件

$表示变量前缀,!$组合,正则里面表示行尾
;多条命令写到一行,用分号分割

[root@localhost tmp]#  ls 1.txt; wc -l 2.txt
1.txt
7 2.txt

~表示用户的家目录,后面正则表达式 表示匹配符
&放到命令后面,会把命令丢到后台

,>> , 2> ,2>> , &>
[]指定字符中的一个[0-9],[a-zA-Z],[abc]
||和 && 用于命令之间

||逻辑或
如果前面的命令执行不成功,就会执行第二条命令
如果前面的命令执行成功了,就不再执行后面的命令

[root@localhost tmp]#  ls la.txt || wc -l 2.txt
ls: 无法访问la.txt: 没有那个文件或目录
7 2.txt
[root@localhost tmp]#  ls 1.txt || wc -l 2.txt
1.txt

&&逻辑并
如果前面的命令错了,就不再执行后面的命令。
只有前面的命令成功了,才会执行后面的命令。

[root@localhost tmp]# ls la.txt && wc -l 2.txt
ls: 无法访问la.txt: 没有那个文件或目录
[root@localhost tmp]# ls 1.txt && wc -l 2.txt
1.txt
7 2.txt

如下示例

[root@localhost tmp]# [ -d helloworld ] || mkdir helloworld
[ -d helloworld ] || mkdir helloworld
如果helloworld这个目录不存在就创建helloworld目录,

[root@localhost tmp]# ls

[root@localhost tmp]# [ -d helloworld ] &&  mkdir helloworld
如果目录helloworld 存在,再去创建目录helloworld
mkdir: 无法创建目录"helloworld": 文件已存在

[root@localhost tmp]# [ -d helloworld ] || mkdir helloworld
如果这个目录已经存在,就不会执行后面的命令

相关测验题目:http://ask.apelearn.com/question/5437