8.10 shell特殊符號cut命令linux
8.11 sort_wc_uniq命令
8.12 tee_tr_split命令正則表達式
8.13 shell特殊符號下shell
相關測驗題目:http://ask.apelearn.com/question/5437 擴展vim
1. source exec 區別 http://alsww.blog.51cto.com/2001924/1113112bash
2. Linux特殊符號大全http://ask.apelearn.com/question/7720less
3. sort並未按ASCII排序 http://blog.csdn.net/zenghui08/article/details/7938975工具
8.10 shell特殊符號cut命令ui
1. 特殊符號spa
* 任意個任意字符.net
*表明零個或多個任意字符
? 任意一個字符
?只表明一個任意的字符
# 註釋字符
表示註釋說明,即#後面的內容都會被忽略
\ 脫義字符
這個字符會將後面的特殊符號 (如*) 還原爲普通字符
| 管道符
這個字符前面曾屢次出現過,它的做用是將前面命令的輸出做爲後面命令的輸人。這裏提到的後面的命令,並非全部的命令均可以的,通常針對文檔操做的命令比較經常使用。例如cat、less、head, tail、grep、cut、sort、wc、uniq、tee、tr、split、sed、awk等,其中grep、sed和awk是正則表達式,必須掌握的工具
2.cut命令
cut命令用來截取某一個字段
其格式爲cut –d '分隔字符' [-cf] n
-d: 後面跟分隔字符,分隔字符要用單引號括起來。
-c: 後面接的是第幾個字符。
-f: 後面接的是第幾個區塊
-d後面加:做爲分割字符,-f1表示截取第一段,-f和1之間的空格無關緊要。
[root@localhost ~]# cat /etc/passwd | cut -d ':' -f 1 | head -5
root
bin
daemon
adm
lp
-c選項後面能夠是1個數字n,也能夠是一個區間n1-n2,還能夠是多個數字n一、n2和n3。
[root@localhost ~]# head -n2 /etc/passwd | cut -c2
o
i
[root@localhost ~]# head -n2 /etc/passwd | cut -c1
r
b
[root@localhost ~]# head -n2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]# head -n2 /etc/passwd | cut -c1-10
root:x:0:0
bin:x:1:1:
[root@localhost ~]# head -n2 /etc/passwd | cut -c1,3,10
ro0
bn:
[root@localhost ~]#
8.11 sort_wc_uniq命令
1. sort命令用作排序,其格式爲sort [ -t 分隔符] [kn1,n2 ] [-nru],這裏n1和n2指的是數字。
-t : 後面跟分隔字符,做用跟cut的-d選項同樣。
-n:表示使用純數字排序。字母和特殊符號都爲0。
-r:表示反向排序。
-u:表示去重複
-kn1,n2: 表示由n1區間排序到n2區間,能夠只寫-kn1,即對n1字段排序。
若是sort不加任何選項,則從首字符向後依次按ASCII碼值進行比較, 最後將它們按升序輸出。
[root@localhost ~]# head -n5 /etc/passwd | sort
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]#
-t選項後面加分隔符,-k選項後面跟單個數字表示對第幾個區域的字符串排序,-n選項則表示使用純數字排序。
[root@localhost ~]# head -n5 /etc/passwd
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
[root@localhost ~]# head -n5 /etc/passwd | sort -t: -k3 -n
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
-k選項後面跟數字n1和n2表示對第n1和n2區域的字符串排序,-r表示反向排序。
[root@localhost ~]# head -n5 /etc/passwd | sort -t: -k3,5 -r
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]#
這裏的-k3,5表示對第3至第5區域內的字符串排序。
2. wc命令用於統計文檔的行數、字符數或詞數。
經常使用選項
-l:統計行數
-m:統計字符數
-w:統計詞數
不跟任何選項,直接跟文檔,則會把行數、詞數和字符數依次輸出
[root@localhost ~]# wc /etc/passwd
21 43 1040 /etc/passwd
[root@localhost ~]# wc -l /etc/passwd
21 /etc/passwd
[root@localhost ~]# wc -m /etc/passwd
1040 /etc/passwd
[root@localhost ~]# wc -w /etc/passwd
43 /etc/passwd
[root@localhost ~]#
3. uniq命令用來刪除重複的行,該命令只有-c選項比較經常使用,它表示統計重複的行數,並把行數寫在前面。
[root@localhost ~]# vim testb.txt
111
222
111
333
使用uniq前,必須先給文件排序,不然無論用。
[root@localhost ~]# uniq testb.txt
111
222
111
333
[root@localhost ~]# sort testb.txt | uniq
111
222
333
[root@localhost ~]# sort testb.txt | uniq -c
2 111
1 222
1 333
[root@localhost ~]#
8.12 tee_tr_split命令
1. 命令tee後面跟文件名,做用和重定向>相似,重定向的同時還在屏幕顯示,該命令經常使用於管道符 | 後。
有2層含義:先重定向,再把管道前面的結果打印在屏幕上。
[root@localhost ~]# echo "aaa" | tee testb.txt
aaa
[root@localhost ~]# cat testb.txt
aaa
清空testb.txt,就用命令>能夠了
[root@localhost ~]# >testb.txt
[root@localhost ~]# cat testb.txt
[root@localhost ~]#
選項「-a「就是追加
[root@localhost ~]# vim 2.txt
111
222
111
333
[root@localhost ~]# cat testb.txt
[root@localhost ~]# sort 2.txt | uniq -c |tee -a testb.txt
2 111
1 222
1 333
[root@localhost ~]# sort 2.txt | uniq -c |tee -a testb.txt
2 111
1 222
1 333
[root@localhost ~]# cat testb.txt
2 111
1 222
1 333
2 111
1 222
1 333
[root@localhost ~]#
2. tr命令用於替換字符,經常使用來處理文檔中出現的特殊符號。
該命令經常使用的選項有如下兩個。
-d:表示刪除某個字符,後面跟要刪除的字符。
-s:表示刪除重複的字符。
tr命令經常使用於把小寫字母變成大寫字母,如tr'[a-z]''[A-Z]'。
[root@localhost ~]# head -n2 /etc/passwd |tr '[a-z]' '[A-Z]'
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
[root@localhost ~]#
tr命令還能夠替換一個字符;
[root@localhost ~]# grep 'root' /etc/passwd |tr 'r' 'R'
Root:x:0:0:Root:/Root:/bin/bash
opeRatoR:x:11:0:opeRatoR:/Root:/sbin/nologin
[root@localhost ~]# echo "aminglinux" |tr '[al]' '[AL]'
AmingLinux
[root@localhost ~]# echo "aminglinux" |tr '[a-z]' '1'
1111111111
[root@localhost ~]#
不過替換、刪除以及去重複等操做都是針對一個字符來說的,有必定的侷限性;若是針對一個字符串,就不能使用了,因此你只須要簡單瞭解一下tr命令便可。
3. split命令用於切割文檔
經常使用的選項
-b:表示依據大小來分割文檔,單位爲byte
-l:表示依據行數來分割文檔
[root@localhost ~]# mkdir split_dir
[root@localhost ~]# cd !$
cd split_dir
[root@localhost split_dir]# cp /etc/passwd ./
[root@localhost split_dir]# split -b 500 passwd
[root@localhost split_dir]# ls
passwd xaa xab xac
[root@localhost split_dir]#
若是split不指定目標文件名,則會以xaa、xab…..這樣的文件名來存取切割後的文件。固然,咱們也能夠指定目標文件名。
[root@localhost split_dir]# rm -rf xa*
[root@localhost split_dir]# split -b 500 passwd 123
[root@localhost split_dir]# ls
123aa 123ab 123ac passwd
[root@localhost split_dir]#
[root@localhost split_dir]# rm -rf 123*
[root@localhost split_dir]# split -l 10 passwd
[root@localhost split_dir]# ls
passwd xaa xab xac
[root@localhost split_dir]# wc -l *
21 passwd
10 xaa
10 xab
1 xac
42 total
[root@localhost split_dir]#
8.13 shell特殊符號下
$ 變量前綴,!$組合,正則裏面表示行尾
[root@localhost split_dir]# cd ..
[root@localhost ~]# ls testb.txt
testb.txt
[root@localhost ~]# ls !$
ls testb.txt
testb.txt
[root@localhost ~]#
;多條命令寫到一行,用分號分割
[root@localhost ~]# mkdir testdir ; touch test1.txt ; touch test2.txt ; ls -d test*
test1.txt test2.txt testb.txt testdir
[root@localhost ~]#
~ 用戶家目錄,root用戶的家目錄是/root,普通用戶則是/home/username,後面正則表達式表示匹配符
[root@localhost ~]# cd ~
[root@localhost ~]# pwd
/root
[root@localhost ~]# su aming
[aming@localhost root]$ cd ~
[aming@localhost ~]$ pwd
/home/aming
[aming@localhost ~]$
& 放到命令後面,會把命令丟到後臺,它經常使用於命令運行時間較長的狀況
[aming@localhost ~]$ sleep 30 &
[1] 2513
[aming@localhost ~]$ jobs
[1]+ Running sleep 30 &
[aming@localhost ~]$
重定向符號>; >>; 2>; 2>>; &>
[root@localhost ~]# ls aaaa
ls: cannot access aaaa: No such file or directory
[root@localhost ~]# ls aaaa 2> /tmp/error
[root@localhost ~]# cat !$
cat /tmp/error
ls: cannot access aaaa: No such file or directory
[root@localhost ~]# ls aaaa 2>> /tmp/error
[root@localhost ~]# cat !$
cat /tmp/error
ls: cannot access aaaa: No such file or directory
ls: cannot access aaaa: No such file or directory
[root@localhost ~]#
[ ] 爲字符組合,用於指定字符中的一個,能夠是一個範圍[0-9],[a-zA-Z],[abc]
[root@localhost ~]# cd /tmp/10
[root@localhost 10]# ls -d test*
test1.txt test2.txt testb.txt testdir
[root@localhost 10]# ls -d test[1-3].txt
test1.txt test2.txt
[root@localhost 10]# ls -d test[12b].txt
test1.txt test2.txt testb.txt
[root@localhost 10]# ls -d test[1-9].txt
test1.txt test2.txt
[root@localhost 10]# ls -d test[1-9a-z].txt
test1.txt test2.txt testb.txt
[root@localhost 10]#
|| 和 && ,用於命令之間
command1;command2 :使用;時,無論command1是否執行成功,都會執行command2。
command1 && command2 :使用&&時,只有command1執行成功後,command2纔會執行,不然command2不執行。
command1 | | command2:使用 | | 時,command1執行成功後則command2不執行,不然執行command2,即command1和command2中總有一條命令會執行。
[root@localhost 10]# rm -rf test*
[root@localhost 10]# touch test1 test3
[root@localhost 10]# ls test2 && touch test2
ls: cannot access test2: No such file or directory
[root@localhost 10]# ls test2
ls: cannot access test2: No such file or directory
[root@localhost 10]# ls test2 || touch test2
ls: cannot access test2: No such file or directory
[root@localhost 10]# ls test*
test1 test2 test3
[root@localhost 10]#
友情連接:阿銘Linux