五週五次課

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

相關文章
相關標籤/搜索