8.10shell特殊符号cut命令 8.11sort_wc_uniq命令 8.12tee_tr_split命令 8.13shell特殊符号下 #8.10shell特殊符_cut命令 --- -*任意个任意字符 -?任意一个字符 -井号#注释字符写命令的时候前面加一个#,那么这条命令就不生效,包括shell脚本里面也是,前面加个#表示这一行不生效,可以加一些注释说明的文字 ``` <root@aminglinux-01~>##lsa.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?imageslim) -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":"-f1 root bin <root@aminglinux-01~>#cat/etc/passwd|head-2|cut-d":"-f1,2 root:x bin:x <root@aminglinux-01~>#cat/etc/passwd|head-2|cut-d":"-f1-3 root:x:0 bin:x:1 <root@aminglinux-01~># <root@aminglinux-01~>#cat/etc/passwd|head-2|cut-c4 t : <root@aminglinux-01~># ``` -针对这前俩行,切割,-d指定分隔符,-f指定段号,-c指定第几个字符截取它的第一段用-f1,截取12段就用-f1,2用逗号隔开,1-3段就用-f1-3,cut截取-c4截取第四个字符 #8.11sortwcuniq命令 ##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:Systemmessagebus:/:/sbin/nologin ftp:x:14:50:FTPUser:/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:Userforpolkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin root:x:0:0:root:/root:/bin/bash saslauth:x:996:76:Saslauthduser:/run/saslauthd:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync systemd-bus-proxy:x:999:997:systemdBusProxy:/:/sbin/nologin systemd-network:x:192:192:systemdNetworkManagement:/:/sbin/nologin tss:x:59:59:AccountusedbythetrouserspackagetosandBoxthetcsddaemon:/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~]#vim1.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 ``` -sort1.txt看下 ``` [root@aminglinux-01~]#vim1.txt [root@aminglinux-01~]#sort1.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-n1.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-nr1.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-l1.txt 221.txt [root@aminglinux-01~]#wc-m1.txt 4681.txt [root@aminglinux-01~]# ``` -先做一个实验vim2.txt在里面写入123abc ``` [root@aminglinux-01~]#vim2.txt 123 abc ~ :wq [root@aminglinux-01~]#vim2.txt [root@aminglinux-01~]#wc-m2.txt 82.txt [root@aminglinux-01~]#cat-A2.txt cat-A显示所有内容所以有2个隐藏的$(换行符$),总共就是8个字符 123$ abc$ [root@aminglinux-01~]# ``` -wc-w统计词以空白字符作为分隔符 ``` [root@aminglinux-01~]#wc-w2.txt 22.txt [root@aminglinux-01~]# 2个词123是一个词abc是一个词 [root@aminglinux-01~]#vim2.txt 123 abc1111,222 [root@aminglinux-01~]#vim2.txt [root@aminglinux-01~]#wc-w2.txt 32.txt [root@aminglinux-01~]#cat2.txt 123 abc1111,222 [root@aminglinux-01~]# ``` -uniq命令 ``` [root@aminglinux-01~]#vi2.txt 123 abc1111,222 123 abc 1 2 1 [root@aminglinux-01~]#vi2.txt [root@aminglinux-01~]#cat2.txt 123 abc1111,222 123 abc 1 2 1 [root@aminglinux-01~]# 下面来用nqia [root@aminglinux-01~]#uniq2.txt 123 abc1111,222 123 abc 1 2 1 没有任何变化? ``` -再次编辑vim2.txt把内容2放到下面去 ``` [root@aminglinux-01~]#vim2.txt [root@aminglinux-01~]#cat2.txt 123 abc1111,222 123 abc 1 1 2 [root@aminglinux-01~]#uniq2.txt 123 abc1111,222 123 abc 1 2 [root@aminglinux-01~]# ``` -现在去重了,原来是112现在是12,所以去重是条件的,需要先排序再去重 ``` [root@aminglinux-01~]#sort2.txt先排序 1 1 123 123 2 abc abc1111,222 [root@aminglinux-01~]#sort2.txt|uniq先排序再管道符去重 1 123 2 abc abc1111,222 [root@aminglinux-01~]# ``` ``` [root@aminglinux-01~]#sort2.txt|uniq-c uniq-c统计重复次数 21 2123 12 1abc 1abc1111,222 [root@aminglinux-01~]# ``` -[x]srot、cut、uniq、cat、less、more、head、tail、wc等等会对文件做一些操作,但是并不会更改文件的内容 #8.12teetrsplit命令 -tee和输出重定向很类似 ``` [root@aminglinux-01~]#sort2.txt|uniq-c>a.txt [root@aminglinux-01~]#cata.txt 21 2123 12 1abc 1abc1111,222 [root@aminglinux-01~]# [root@aminglinux-01~]#sort2.txt|uniq-c|teea.txt 21 2123 12 1abc 1abc1111,222 [root@aminglinux-01~]# ``` -可以先清空a.txt里的内容>a.txt就是清空 ``` [root@aminglinux-01~]#>a.txt [root@aminglinux-01~]#cata.txt [root@aminglinux-01~]#sort2.txt|uniq-c|teea.txt 21 2123 12 1abc 1abc1111,222 [root@aminglinux-01~]# ``` -tee-a追加等同于>> ``` [root@aminglinux-01~]#sort2.txt|uniq-c|tee-aa.txt 21 2123 12 1abc 1abc1111,222 [root@aminglinux-01~]#cata.txt 21 2123 12 1abc 1abc1111,222 21 2123 12 1abc 1abc1111,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-b100Mbigfile^C [root@aminglinux-01~]#split-l1000bigfile^C ``` [root@aminglinux-01~]#find/etc/-typef-name"*conf"-execcat{}>>a.txt\; [root@aminglinux-01~]#du-sha.txt 256K a.txt [root@aminglinux-01~]#find/etc/-typef-name"*conf"-exececho{}>>a.txt\; [root@aminglinux-01~]#du-sha.txt 448K a.txt [root@aminglinux-01~]#ls 1111_heard.txt1.txt1.txt.bak2.txt3.txtanaconda-ks.cfg.1biji.txt 1231_sorft.txt1.txt~2342.txt.bak4.txtbb.txttest [root@aminglinux-01~]# [root@aminglinux-01~]#mva.txttest/ [root@aminglinux-01~]#cdtest [root@aminglinux-01test]#ls a.txt [root@aminglinux-01test]# ``` -split分割成1000字节一个文件 ``` [root@aminglinux-01test]#split-b1000a.txt [root@aminglinux-01test]#ls a.txtxanxbbxbpxcdxcrxdfxdtxehxevxfjxfxxglxgzxhnxibxipxjdxjr xaaxaoxbcxbqxcexcsxdgxduxeixewxfkxfyxgmxhaxhoxicxiqxjexjs xabxapxbdxbrxcfxctxdhxdvxejxexxflxfzxgnxhbxhpxidxirxjfxjt xacxaqxbexbsxcgxcuxdixdwxekxeyxfmxgaxgoxhcxhqxiexisxjgxju xadxarxbfxbtxchxcvxdjxdxxelxezxfnxgbxgpxhdxhrxifxitxjhxjv xaexasxbgxbuxcixcwxdkxdyxemxfaxfoxgcxgqxhexhsxigxiuxjixjw xafxatxbhxbvxcjxcxxdlxdzxenxfbxfpxgdxgrxhfxhtxihxivxjjxjx xagxauxbixbwxckxcyxdmxeaxeoxfcxfqxgexgsxhgxhuxiixiwxjkxjy xahxavxbjxbxxclxczxdnxebxepxfdxfrxgfxgtxhhxhvxijxixxjlxjz xaixawxbkxbyxcmxdaxdoxecxeqxfexfsxggxguxhixhwxikxiyxjmxka xajxaxxblxbzxcnxdbxdpxedxerxffxftxghxgvxhjxhxxilxizxjn xakxayxbmxcaxcoxdcxdqxeexesxfgxfuxgixgwxhkxhyximxjaxjo xalxazxbnxcbxcpxddxdrxefxetxfhxfvxgjxgxxhlxhzxinxjbxjp xamxbaxBoxccxcqxdexdsxegxeuxfixfwxgkxgyxhmxiaxioxjcxjq [root@aminglinux-01test]#du-sh 1.3M . [root@aminglinux-01test]#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-01test]#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-01test]#ls a.txtxanxbbxbpxcdxcrxdfxdtxehxevxfjxfxxglxgzxhnxibxipxjdxjr xaaxaoxbcxbqxcexcsxdgxduxeixewxfkxfyxgmxhaxhoxicxiqxjexjs xabxapxbdxbrxcfxctxdhxdvxejxexxflxfzxgnxhbxhpxidxirxjfxjt xacxaqxbexbsxcgxcuxdixdwxekxeyxfmxgaxgoxhcxhqxiexisxjgxju xadxarxbfxbtxchxcvxdjxdxxelxezxfnxgbxgpxhdxhrxifxitxjhxjv xaexasxbgxbuxcixcwxdkxdyxemxfaxfoxgcxgqxhexhsxigxiuxjixjw xafxatxbhxbvxcjxcxxdlxdzxenxfbxfpxgdxgrxhfxhtxihxivxjjxjx xagxauxbixbwxckxcyxdmxeaxeoxfcxfqxgexgsxhgxhuxiixiwxjkxjy xahxavxbjxbxxclxczxdnxebxepxfdxfrxgfxgtxhhxhvxijxixxjlxjz xaixawxbkxbyxcmxdaxdoxecxeqxfexfsxggxguxhixhwxikxiyxjmxka xajxaxxblxbzxcnxdbxdpxedxerxffxftxghxgvxhjxhxxilxizxjn xakxayxbmxcaxcoxdcxdqxeexesxfgxfuxgixgwxhkxhyximxjaxjo xalxazxbnxcbxcpxddxdrxefxetxfhxfvxgjxgxxhlxhzxinxjbxjp xamxbaxBoxccxcqxdexdsxegxeuxfixfwxgkxgyxhmxiaxioxjcxjq [root@aminglinux-01test]#rm-fx* [root@aminglinux-01test]#ls a.txt [root@aminglinux-01test]# ``` 指定每个100ksplit-b(默认大小是字节) ``` [root@aminglinux-01test]#split-b100ka.txt [root@aminglinux-01test]#ls a.txtxaaxabxac [root@aminglinux-01test]#du-sh* 256K a.txt 100K xaa 100K xab 56K xac [root@aminglinux-01test]#rm-fx* [root@aminglinux-01test]#split-b100kabc split:无法打开"abc"读取数据:没有那个文件或目录 [root@aminglinux-01test]#split-b100kabc. split:无法打开"abc."读取数据:没有那个文件或目录 [root@aminglinux-01test]#split-b100ka.txtabc [root@aminglinux-01test]#ls abcaaabcababcaca.txt [root@aminglinux-01test]#rm-fabc*指定名字 [root@aminglinux-01test]#split-b100ka.txtabc. [root@aminglinux-01test]#ls abc.aaabc.ababc.aca.txt [root@aminglinux-01test]#rm-fabc* [root@aminglinux-01test]# ``` -除了指定大小之外,还可以指定行split-l ``` [root@aminglinux-01test]#split-l1000a.txt [root@aminglinux-01test]#ls a.txtxaaxabxacxadxaexafxag [root@aminglinux-01test]#ls-l 总用量520 -rw-r--r--.1rootroot2600548月2017:45a.txt -rw-r--r--.1rootroot447128月2018:15xaa -rw-r--r--.1rootroot441518月2018:15xab -rw-r--r--.1rootroot379828月2018:15xac -rw-r--r--.1rootroot398018月2018:15xad -rw-r--r--.1rootroot351028月2018:15xae -rw-r--r--.1rootroot393508月2018:15xaf -rw-r--r--.1rootroot189568月2018:15xag [root@aminglinux-01test]#wc-l*查看行数 6601a.txt 1000xaa 1000xab 1000xac 1000xad 1000xae 1000xaf 601xag 13202总用量 [root@aminglinux-01test]# ``` #8.13shell特殊符号下 ![mark](http://oqxf7c508.bkt.clouddn.com/blog/20170820/225015664.png?imageslim) -$表示变量前缀,!$组合,正则里面表示行尾 -;多条命令写到一行,用分号分割 ``` [root@aminglinux-01~]#ls1.txt;wc-l2.txt 1.txt 72.txt [root@aminglinux-01~]# ``` -~表示用户的家目录,后面正则表达式表示匹配符 -&放到命令后面,会把命令丢到后台 ->,>>,2>,2>>,&> -[]指定字符中的一个[0-9],[a-zA-Z],[abc] -||和&&用于命令之间 1.||表示俩条命令之间, 如果前面的命令执行不成功,就会执行第二条命令,或1命令或2命令 如果前面的命令1执行成功了,就不再执行后面的命令2。 ``` [root@aminglinux-01~]#lsla.txt||wc-l2.txt ls:无法访问la.txt:没有那个文件或目录 72.txt [root@aminglinux-01~]#ls1.txt||wc-l2.txt 1.txt [root@aminglinux-01~]# ``` 2.&&正好相反 如果前面的命令错了,就不再执行后面的命令。 只有前面的命令成功了,才会执行后面的命令。 ``` [root@aminglinux-01~]#lsla.txt&&wc-l2.txt ls:无法访问la.txt:没有那个文件或目录 [root@aminglinux-01~]#ls1.txt&&wc-l2.txt 1.txt 72.txt [root@aminglinux-01~]# ``` -举例 ``` [root@aminglinux-01~]#[-daminglinux]||mkdiraminglinux -[-daminglinux]||mkdiraminglinux 如果aminglinux这个目录不存在就创建aminglinux目录, [root@aminglinux-01~]#ls 1111_heard.txt1.txt1.txt.bak2.txt3.txtaminglinuxbb.txttest 1231_sorft.txt1.txt~2342.txt.bak4.txtanaconda-ks.cfg.1biji.txt [root@aminglinux-01~]#[-daminglinux]&&mkdiraminglinux 如果目录aminglinux存在,再去创建目录aminglinux, mkdir:无法创建目录"aminglinux":文件已存在 [root@aminglinux-01~]#[-daminglinux]||mkdiraminglinux 如果这个目录已经存在,就不会执行后面的命令 [root@aminglinux-01~]# ``` #拓展 -[x]相关测验题目:http://ask.apelearn.com/question/5437 1.sourceexec区别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