8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下 # 8.10 shell 特殊符_cut命令 --- - * 任意个任意字符 - ?任意一个字符 - 井号#注释字符 写命令的时候前面加一个#,那么这条命令就不生效,包括shell脚本里面也是,前面加个#表示这一行不生效,可以加一些注释说明的文字 ``` <root@aminglinux-01 ~># #ls a.txt <root@aminglinux-01 ~>##dkdkdkd <root@aminglinux-01 ~># ``` - \ 脱义字符 ``` <root@aminglinux-01 ~>#a=1 <root@aminglinux-01 ~>#b=2 <root@aminglinux-01 ~>#c=$a$b <root@aminglinux-01 ~>#echo $c 12 <root@aminglinux-01 ~># ``` - 现在就想让这个c=这个$a$b 的字符串,之前给的方法是用单引号,还可以使用\脱义字符 ``` <root@aminglinux-01 ~>#c='$a$b^C <root@aminglinux-01 ~>#c=\$a\$b <root@aminglinux-01 ~>#echo $c $a$b <root@aminglinux-01 ~># ``` - | 管道符 ![mark](http://oqxf7c508.bkt.clouddn.com/blog/20170819/231012229.png?p_w_picpathslim) - cut命令的用法 ``` <root@aminglinux-01 ~>#cat /etc/passwd |head -2 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin <root@aminglinux-01 ~>#cat /etc/passwd |head -2 |cut -d ":" -f 1 root bin <root@aminglinux-01 ~>#cat /etc/passwd |head -2 |cut -d ":" -f 1,2 root:x bin:x <root@aminglinux-01 ~>#cat /etc/passwd |head -2 |cut -d ":" -f 1-3 root:x:0 bin:x:1 <root@aminglinux-01 ~># <root@aminglinux-01 ~>#cat /etc/passwd |head -2 |cut -c 4 t : <root@aminglinux-01 ~># ``` - 针对这前俩行,切割,-d指定分隔符,-f指定段号,-c指定第几个字符 截取它的第一段用 -f 1 ,截取1 2 段就用 -f 1,2 用逗号隔开,1-3段就用-f 1-3 , cut 截取 -c 4 截取第四个字符 # 8.11 sort wc uniq命令 ## sort排序 - 默认sort排序按照 阿斯玛ASCII排序 ``` [root@aminglinux-01 ~]# sort /etc/passwd adm:x:3:4:adm:/var/adm:/sbin/nologin aming:x:1000:1005::/home/aming:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin chrony:x:997:995::/var/lib/chrony:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin games:x:12:100:games:/usr/games:/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 nobody:x:99:99:Nobody:/:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin polkitd:x:998:996:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin root:x:0:0:root:/root:/bin/bash saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin user1:x:1001:1001::/home/user1:/bin/bash user2:x:1002:1002::/home/user2:/bin/bash user3:x:1004:1005::/home/user3:/bin/bash user4:x:1006:1005::/home/aming111:/sbin/nologin user5:x:1007:1007::/home/user5:/bin/bash user6:x:1008:1010::/home/user6:/bin/bash [root@aminglinux-01 ~]# ``` - 先做个实验,取/etc/passwd/的前10行 追加到 1.txt下 ``` [root@aminglinux-01 ~]# head /etc/passwd >> 1.txt [root@aminglinux-01 ~]# vim 1.txt 1.txt 2.txt 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 sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin 2222222aaaaaaa 488888888888asldkfas *slkdf 222111 223333 22aaa < > { ] ~ ~ ~ ~ ~ ~ :wq ``` - sort 1.txt 看下 ``` [root@aminglinux-01 ~]# vim 1.txt [root@aminglinux-01 ~]# sort 1.txt < > ] { 1.txt 222111 2222222aaaaaaa 223333 22aaa 2.txt 488888888888asldkfas 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 operator:x:11:0:operator:/root:/sbin/nologin root:x:0:0:root:/root:/bin/bash shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown *slkdf sync:x:5:0:sync:/sbin:/bin/sync [root@aminglinux-01 ~]# ``` - 看下,特殊符号排在前面,然后是数字,然后是字母,然后是*,这就是sort - sort -n 会以数字去排序,字母和特殊符号 默认情况下都默认是0 ``` [root@aminglinux-01 ~]# sort -n 1.txt < > ] { 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 operator:x:11:0:operator:/root:/sbin/nologin root:x:0:0:root:/root:/bin/bash shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown *slkdf sync:x:5:0:sync:/sbin:/bin/sync 1.txt 2.txt 22aaa 222111 223333 2222222aaaaaaa 488888888888asldkfas [root@aminglinux-01 ~]# ``` - sort -nr 加上r 就会反序排序 ``` [root@aminglinux-01 ~]# sort -nr 1.txt 488888888888asldkfas 2222222aaaaaaa 223333 222111 22aaa 2.txt 1.txt sync:x:5:0:sync:/sbin:/bin/sync *slkdf shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt daemon:x:2:2:daemon:/sbin:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin { ] > < [root@aminglinux-01 ~]# ``` - sort -t 分隔符 -kn1/-kn1,n2 用的比较少了解下即可 - wc -l 统计行数 - wc -m 统计字符数 - wc -w 统计词 ``` [root@aminglinux-01 ~]# wc -l 1.txt 22 1.txt [root@aminglinux-01 ~]# wc -m 1.txt 468 1.txt [root@aminglinux-01 ~]# ``` - 先做一个实验vim 2.txt 在里面写入 123 abc ``` [root@aminglinux-01 ~]# vim 2.txt 123 abc ~ :wq [root@aminglinux-01 ~]# vim 2.txt [root@aminglinux-01 ~]# wc -m 2.txt 8 2.txt [root@aminglinux-01 ~]# cat -A 2.txt cat -A 显示所有内容 所以有2个隐藏的$(换行符$) ,总共就是8个字符 123$ abc$ [root@aminglinux-01 ~]# ``` - wc -w统计词 以空白字符 作为分隔符 ``` [root@aminglinux-01 ~]# wc -w 2.txt 2 2.txt [root@aminglinux-01 ~]# 2个词 123 是一个词 abc 是一个词 [root@aminglinux-01 ~]# vim 2.txt 123 abc 1111,222 [root@aminglinux-01 ~]# vim 2.txt [root@aminglinux-01 ~]# wc -w 2.txt 3 2.txt [root@aminglinux-01 ~]# cat 2.txt 123 abc 1111,222 [root@aminglinux-01 ~]# ``` - uniq命令 ``` [root@aminglinux-01 ~]# vi 2.txt 123 abc 1111,222 123 abc 1 2 1 [root@aminglinux-01 ~]# vi 2.txt [root@aminglinux-01 ~]# cat 2.txt 123 abc 1111,222 123 abc 1 2 1 [root@aminglinux-01 ~]# 下面来用nqia [root@aminglinux-01 ~]# uniq 2.txt 123 abc 1111,222 123 abc 1 2 1 没有任何变化? ``` - 再次编辑vim 2.txt 把内容 2放到下面去 ``` [root@aminglinux-01 ~]# vim 2.txt [root@aminglinux-01 ~]# cat 2.txt 123 abc 1111,222 123 abc 1 1 2 [root@aminglinux-01 ~]# uniq 2.txt 123 abc 1111,222 123 abc 1 2 [root@aminglinux-01 ~]# ``` - 现在去重了,原来是 1 1 2 现在是 1 2,所以去重是条件的,需要先排序再去重 ``` [root@aminglinux-01 ~]# sort 2.txt 先排序 1 1 123 123 2 abc abc 1111,222 [root@aminglinux-01 ~]# sort 2.txt |uniq 先排序再管道符去重 1 123 2 abc abc 1111,222 [root@aminglinux-01 ~]# ``` ``` [root@aminglinux-01 ~]# sort 2.txt |uniq -c uniq -c 统计重复次数 2 1 2 123 1 2 1 abc 1 abc 1111,222 [root@aminglinux-01 ~]# ``` - [x] srot 、cut、uniq、cat、less、more、head、tail、wc等等会对文件做一些操作,但是并不会更改文件的内容 # 8.12 tee tr split 命令 - tee 和 输出重定向很类似 ``` [root@aminglinux-01 ~]# sort 2.txt |uniq -c > a.txt [root@aminglinux-01 ~]# cat a.txt 2 1 2 123 1 2 1 abc 1 abc 1111,222 [root@aminglinux-01 ~]# [root@aminglinux-01 ~]# sort 2.txt |uniq -c | tee a.txt 2 1 2 123 1 2 1 abc 1 abc 1111,222 [root@aminglinux-01 ~]# ``` - 可以先清空a.txt里的内容 >a.txt 就是清空 ``` [root@aminglinux-01 ~]# >a.txt [root@aminglinux-01 ~]# cat a.txt [root@aminglinux-01 ~]# sort 2.txt |uniq -c | tee a.txt 2 1 2 123 1 2 1 abc 1 abc 1111,222 [root@aminglinux-01 ~]# ``` - tee -a 追加 等同于>> ``` [root@aminglinux-01 ~]# sort 2.txt |uniq -c | tee -a a.txt 2 1 2 123 1 2 1 abc 1 abc 1111,222 [root@aminglinux-01 ~]# cat a.txt 2 1 2 123 1 2 1 abc 1 abc 1111,222 2 1 2 123 1 2 1 abc 1 abc 1111,222 [root@aminglinux-01 ~]# ``` - tr 命令 tr 是用来替换字符的 tr "a" "b", 大小写替换tr '[a-z]' '[A-Z]' ``` [root@aminglinux-01 ~]# echo "aminglinux" |tr 'a' 'A' Aminglinux [root@aminglinux-01 ~]# [root@aminglinux-01 ~]# echo "aminglinux" |tr '[al]' '[AL]' AmingLinux 全部换成大写 [root@aminglinux-01 ~]# echo "aminglinux" |tr '[a-z]' '[A-Z]' AMINGLINUX [root@aminglinux-01 ~]# 改成数字 [root@aminglinux-01 ~]# echo "aminglinux" |tr '[a-z]' '1' 1111111111 [root@aminglinux-01 ~]# ``` - split 切割,一个大文件切割成小文件 -b 大小 (默认单位字节),-l 行数 [root@aminglinux-01 ~]# split -b 100M bigfile^C [root@aminglinux-01 ~]# split -l 1000 bigfile^C ``` [root@aminglinux-01 ~]# find /etc/ -type f -name "*conf" -exec cat {} >> a.txt \; [root@aminglinux-01 ~]# du -sh a.txt 256K a.txt [root@aminglinux-01 ~]# find /etc/ -type f -name "*conf" -exec echo {} >> a.txt \; [root@aminglinux-01 ~]# du -sh a.txt 448K a.txt [root@aminglinux-01 ~]# ls 111 1_heard.txt 1.txt 1.txt.bak 2.txt 3.txt anaconda-ks.cfg.1 biji.txt 123 1_sorft.txt 1.txt~ 234 2.txt.bak 4.txt bb.txt test [root@aminglinux-01 ~]# [root@aminglinux-01 ~]# mv a.txt test/ [root@aminglinux-01 ~]# cd test [root@aminglinux-01 test]# ls a.txt [root@aminglinux-01 test]# ``` - split 分割成1000字节一个文件 ``` [root@aminglinux-01 test]# split -b 1000 a.txt [root@aminglinux-01 test]# 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@aminglinux-01 test]# du -sh 1.3M . [root@aminglinux-01 test]# du -sh * 256K a.txt 4.0K xaa 4.0K xab 4.0K xac 4.0K xad 4.0K xae 4.0K xaf 4.0K xag ... 这里为了节约空间,省略了很多 4.0K xjw 4.0K xjx 4.0K xjy 4.0K xjz 4.0K xka [root@aminglinux-01 test]# du -sb * 260054 a.txt 1000 xaa 1000 xab 1000 xix 1000 xiy 1000 xiz ... 这里为了节约空间,省略了很多 1000 xjt 1000 xju 1000 xjv 1000 xjw 1000 xjx 1000 xjy 1000 xjz 54 xka [root@aminglinux-01 test]# 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@aminglinux-01 test]# rm -f x* [root@aminglinux-01 test]# ls a.txt [root@aminglinux-01 test]# ``` 指定每个100k split -b (默认大小是字节) ``` [root@aminglinux-01 test]# split -b 100k a.txt [root@aminglinux-01 test]# ls a.txt xaa xab xac [root@aminglinux-01 test]# du -sh * 256K a.txt 100K xaa 100K xab 56K xac [root@aminglinux-01 test]# rm -f x* [root@aminglinux-01 test]# split -b 100k abc split: 无法打开"abc" 读取数据: 没有那个文件或目录 [root@aminglinux-01 test]# split -b 100k abc. split: 无法打开"abc." 读取数据: 没有那个文件或目录 [root@aminglinux-01 test]# split -b 100k a.txt abc [root@aminglinux-01 test]# ls abcaa abcab abcac a.txt [root@aminglinux-01 test]# rm -f abc* 指定名字 [root@aminglinux-01 test]# split -b 100k a.txt abc. [root@aminglinux-01 test]# ls abc.aa abc.ab abc.ac a.txt [root@aminglinux-01 test]# rm -f abc* [root@aminglinux-01 test]# ``` - 除了指定大小之外,还可以指定行 split -l ``` [root@aminglinux-01 test]# split -l 1000 a.txt [root@aminglinux-01 test]# ls a.txt xaa xab xac xad xae xaf xag [root@aminglinux-01 test]# ls -l 总用量 520 -rw-r--r--. 1 root root 260054 8月 20 17:45 a.txt -rw-r--r--. 1 root root 44712 8月 20 18:15 xaa -rw-r--r--. 1 root root 44151 8月 20 18:15 xab -rw-r--r--. 1 root root 37982 8月 20 18:15 xac -rw-r--r--. 1 root root 39801 8月 20 18:15 xad -rw-r--r--. 1 root root 35102 8月 20 18:15 xae -rw-r--r--. 1 root root 39350 8月 20 18:15 xaf -rw-r--r--. 1 root root 18956 8月 20 18:15 xag [root@aminglinux-01 test]# wc -l * 查看行数 6601 a.txt 1000 xaa 1000 xab 1000 xac 1000 xad 1000 xae 1000 xaf 601 xag 13202 总用量 [root@aminglinux-01 test]# ``` # 8.13 shell特殊符号下 ![mark](http://oqxf7c508.bkt.clouddn.com/blog/20170820/225015664.png?p_w_picpathslim) - $表示变量前缀,!$组合,正则里面表示行尾 - ;多条命令写到一行,用分号分割 ``` [root@aminglinux-01 ~]# ls 1.txt; wc -l 2.txt 1.txt 7 2.txt [root@aminglinux-01 ~]# ``` - ~表示用户的家目录,后面正则表达式 表示匹配符 - &放到命令后面,会把命令丢到后台 - > ,>> , 2> ,2>> , &> - []指定字符中的一个[0-9],[a-zA-Z],[abc] -||和 && 用于命令之间 1. ||表示俩条命令之间, 如果前面的命令执行不成功,就会执行第二条命令,或1命令或2命令 如果前面的命令1执行成功了,就不再执行后面的命令2。 ``` [root@aminglinux-01 ~]# ls la.txt || wc -l 2.txt ls: 无法访问la.txt: 没有那个文件或目录 7 2.txt [root@aminglinux-01 ~]# ls 1.txt || wc -l 2.txt 1.txt [root@aminglinux-01 ~]# ``` 2. && 正好相反 如果前面的命令错了,就不再执行后面的命令。 只有前面的命令成功了,才会执行后面的命令。 ``` [root@aminglinux-01 ~]# ls la.txt && wc -l 2.txt ls: 无法访问la.txt: 没有那个文件或目录 [root@aminglinux-01 ~]# ls 1.txt && wc -l 2.txt 1.txt 7 2.txt [root@aminglinux-01 ~]# ``` - 举例 ``` [root@aminglinux-01 ~]# [ -d aminglinux ] || mkdir aminglinux - [ -d aminglinux ] || mkdir aminglinux 如果aminglinux这个目录不存在就创建aminglinux目录, [root@aminglinux-01 ~]# ls 111 1_heard.txt 1.txt 1.txt.bak 2.txt 3.txt aminglinux bb.txt test 123 1_sorft.txt 1.txt~ 234 2.txt.bak 4.txt anaconda-ks.cfg.1 biji.txt [root@aminglinux-01 ~]# [ -d aminglinux ] && mkdir aminglinux 如果目录aminglinux 存在,再去创建目录aminglinux, mkdir: 无法创建目录"aminglinux": 文件已存在 [root@aminglinux-01 ~]# [ -d aminglinux ] || mkdir aminglinux 如果这个目录已经存在,就不会执行后面的命令 [root@aminglinux-01 ~]# ``` # 拓展 - [x] 相关测验题目:http://ask.apelearn.com/question/5437 1. source exec 区别 http://alsww.blog.51cto.com/2001924/1113112 2. Linux特殊符号大全 http://ask.apelearn.com/question/7720 3. sort并未按ASCII排序 http://blog.csdn.net/zenghui08/article/details/7938975
8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下
原创
©著作权归作者所有:来自51CTO博客作者ch71smas的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章