Linux Shell編程

內容均來自《Linux命令行與shell腳本編程大全》html

尚待補充完整,和添加較爲實際的應用案例......git

 

初識別Linux Shellweb

 1 #!/bin/bash
 2 #############################################
 3 #獲取Linux系統虛擬內存當前的狀態
 4 cat /proc/meminfo
 5 #查看當前共享內存界面
 6 ipcs -m
 7 #軟件程序管理
 8 ps ax
 9 
10 #############################################
chapte1

走進Shell正則表達式

 1 #!/bin/bash
 2 #############################################
 3 #bash shell提示符字符(格式化輸出提示信息到終端,也能夠用於控制檯程序中)
 4 #詳細參考博客:http://blog.itpub.net/14385647/viewspace-749630/
 5 echo $PS1    #打印當前環境變量配置
 6 # \a
 7 # \d
 8 # \e
 9 # \h
10 # \H
11 # ...
12 
13 #############################################
14 #建立連接文件
15 #硬連接:索引節點號相同:其實是同一文件
16 cp -l test1 test2    #建立了一個指向test1的硬連接文件test2
17 ls -il
18 #軟連接:索引節點號不同:是兩個文件可是軟連接文件很小,只存儲了源文件的信息
19 cp -s test1 test3
20 ls -il
21 #移動有軟連接文件的文件,這個連接文件會失效;而對硬連接文件無影響
22 
23 #############################################
24 #查看文件的命令
25 cat
26 more
27 less
28 tail
29 head
chapter2

經常使用Bash Shell命令shell

#!/bin/bash
#############################################
#監測程序
ps
#############################################
#查看磁盤使用
df #查看全部磁盤使用
du #查看特定目錄的磁盤使用

#############################################
#處理數據文件
cat file1
sort -n file1      #識別數字並排序
sort -M file1     #識別月份並排序
#搜索數據
grep three file1    #搜索包含three子字段的字段
#數據壓縮
bzip2
compress
gzip
zip
#歸檔數據
tar
chapter4

構建基本腳本數據庫

 1 #!/bin/bash
 2 #chapter 10
 3 ##################################
 4 # #管道
 5 # #爲選擇內容添加註釋Ctrl+Shift+/
 6 # dpkg -l | sort | more
 7 
 8 ##################################
 9 # #arithmetic 
10 # #獲取文件屬主權限 chmod u+x filename
11 # #expr command 
12 # #mind that there must be space bewteen number and methematical symbol,some symbols need using \ 
13 # #使用expr是爲了與Bourne shell保持兼容,只能進行整數運算
14 # expr 1 + 5
15 
16 # expr 5 \* 2
17 
18 # var1=10
19 # var2=20
20 # var3=`expr $var1 / $var2`
21 # echo The result is $var3
22 
23 # #方括號 square brackets
24 # var4=5
25 # var5=$[$var4 * ($var2 - $var1)]
26 # echo The result is $var5
27 
28 # #浮點解決方案 bc(bash counter)
29 # var6=`echo "scale=5; 3.44 / 5" | bc`
30 # echo The answer is $var6
31 
32 # var7=`bc << EOF
33 # scale=4
34 # a1=($var1 * $var2)
35 # b1=($var4 * $var6)
36 # a1 + b1
37 # EOF
38 # `
39 # echo The final answer is $var7
40 
41 ##################################
42 # #退出腳本
43 # #$?查看上個命令退出狀態碼
44 # date
45 # echo $?
46 
47 # #exit command
48 var1=10
49 exit $va1
50 
51 ##################################
chapter10

使用結構化命令express

 1 #!/bin/bash
 2 #chapter11 結構化命令
 3 ##################################
 4 #if-then語句 退出狀態碼爲0,執行then後面的語句
 5 # if date 
 6 # then
 7 #     echo "execute the command  behind of then"
 8 # fi
 9 
10 # if [[ date ]]; then
11 #     echo "execute the command  behind of then"
12 # fi
13 
14 # #查找某特定用戶是否在當前系統上使用
15 # testuser=seeker
16 # if [[ grep  $testuser /etc/passwd ]]; then
17 # if     grep  $testuser /etc/passwd
18 # then
19 # if     grep  $testuser /etc/passwd; then
20 #     echo the bash file for user $testuser are:
21 #     ls -a /home/$testuser/.b*
22 # fi
23 
24 ##################################
25 #test 命令 數值比較/字符串比較(= != < > -n -z)/文件比較(-d file -e flie -f -r -s -w -x -O -G file1 -nt file2 file1 -ot file) ,注意保持[]與條件的距離
26 #test命令只能處理整數的比較,字符串比較是比較首字母的ASCLL碼的大小
27 # var1=10
28 # var2=11
29 
30 # if [ $var1 -eq $var2 ]; then
31 #     echo "The value $var1 is equal to var2"
32 # elif [ $var1 -gt $var2 ]; then
33 #     echo "The value $var1 is larger than $var2"
34 # elif [ $var1 -lt $var2 ]; then
35 #     echo "The value $var1 is smaller than $var2"
36 # fi
37 
38 # var3=Testing
39 # var4=testing
40 # if [ $var3 \> $var4 ]; then
41 #     echo "$var3 is greater than $var4"
42 # else 
43 #     echo "$var3 is less than $var4"
44 # fi
45 
46 ##################################
47 # #複合條件測試 空文件apace file
48 # #相關命令 mkdir rm vi touch
49 # logfile=$HOME/filename
50 # touch u+w $logfile
51 # if [ -d $HOME ] && [ -w $HOME/filename ]; then
52 #     #statements
53 #     if [ -x $logfile ]; then
54 #         #statements
55 #     fi
56 # fi
57 
58 ##################################
59 # #if-then的高級特性
60 # #使用雙尖括號 可使用高級數學表達式 val++ val-- ++val --val ! ~ ** << >> & | || &&
61 # #test只容許在比較中使用簡單的算數操做
62 # val5=10
63 # if (( $val5 ** 2 > 90 )); then
64 #     (( val6 = val5 ** 2 ))
65 # fi
66 
67 # #使用雙方括號 標準字符串比較,模式匹配
68 # #針對字符串比較的高級特性,相關應用正則表達式
69 # if [[ $USER == s* ]]; then
70 #     echo "Hello $USER"
71 # else 
72 #     echo "No this user"
73 # fi
74 
75 ##################################
76 #case命令
77 #相關命令 whois  whoami  who  w  finger  網址:http://daaoao.blog.51cto.com/2329117/614698  
78 case $USER in
79     seeker | barbara )
80     echo "Welcome,$USER";;
81     testing)
82     echo "Special testing account" ;;
83     *) 
84     echo "Sorry,you are not allowed here" ;;
85 esac
86 ##################################
chapter11

更多的結構化命令編程

 1 #!/bin/bash
 2 #結構化命令
 3 #############################################
 4 # #for循環:注意符號"'"須要使用\轉義或者使用雙引號定義使用了此單引號的值;包含有空格的值須要使用雙引號擴起來
 5 # #默認使用空格看成各個詞的分界線
 6 # for test in I don\'t know if "this'll" work, let\'s see "New York"; do
 7 #     echo "word: $test"
 8 # done
 9 
10 #############################################
11 # #從變量中讀取列表
12 # list="a b c d e f"
13 # list=$list" g"
14 # for letter in $list; do
15 #     echo "Have you learned $letter?"
16 # done
17 # echo ${list} h 
18 
19 #############################################
20 # #從命令讀取值
21 # #相關命令 touch 在當前目錄下創建新文檔 vi i進入插入模式,Esc退出插入模式
22 # #倒引號``表示括住的內容爲命令 shell中一些特殊符號功能詳見 www.cnblogs.com/xuxm2007/archive/2011/10/20/2218846.html
23 # file="chapter12tex"
24 # for state in `cat $file`; do
25 #     echo "Vist beautiful $state"
26 # done
27 
28 #############################################
29 #用通配符讀取目錄
30 # for file in /home/seeker/mydisk/myrepo/seekershell/Source_LSP/* ; do
31 #     if [ -d "$file" ]; then
32 #         echo "$file is a directory"
33 #     elif [ -f "$file" ]; then
34 #         echo "$file is a file"    
35 #     fi
36 # done
37 
38 #############################################
39 #更改字段分隔符
40 
41 
42 #############################################
43 # #C語言風格的for命令
44 # #給變量賦值能夠有空格;條件中的變量不宜美圓符開頭;迭代過程的算式未用expr命令
45 # #可使用多個變量
46 # for (( i = 0; i < 10; i++ )); do
47 #     echo "The next number is $i"
48 # done
49 
50 # for (( i = 1, b=10; i <= 10; i++, b-- )); do
51 #     echo "$i - $b"
52 # done
53 
54 #############################################
55 # #wile命令 使用多個測試命令
56 # var1=10;
57 # while echo $var1 
58 #     [ $var1 -ge 0 ]; do
59 #     echo "this is inside the loop"
60 #     var1=$[ $var1 - 1 ]
61 # done
62 
63 #############################################
64 # #until命令
65 # #也可以使用多個測試命令
66 # var2=100
67 # until echo $var2
68 #     [ $var2 -eq 0 ]; do
69 #     echo inside the loop: $var2
70 #     var2=$[ $var2 - 25 ]
71 # done
72 
73 #############################################
74 var3=5
75 while [ $var3 -ge 0 ]
76 do
77     echo "Outer loop: $var3"
78     for (( var4 = 1; $var4 < 3; var4++ )); do
79         var5=$[ $var3 * $var4 ]
80         echo "  Inner loop: $var3 * $var4 = $var5"
81     done
82     var3=$[ $var3 - 1 ]
83 done
84 
85 #############################################
86 #控制循環
87 #break
88 #continue
89 
90 #############################################
91 #處理循環的輸出
92 for (( i = 0; i < 10; i++ )); do
93     echo "The number is $i"
94 done > test.txt
95 echo "The command is finished."
96 #done | sort
97 
98 #############################################
chapter12

處理用戶輸入bash

 1 #!/bin/bash
 2 #######################################
 3 # #命令行參數
 4 # #當腳本中的參數超過9後,須要在第9個變量的數字周圍添加花括號,${10}
 5 # factorial=1
 6 # for (( i = 1; i <= $1; i++ )); do
 7 #     factorial=$[ $factorial * $i *$2 ]
 8 # done
 9 # echo The factorial of $1 and $2 is $factorial
10 
11 # total=$[ ${10} * ${11} ]
12 # echo The tenth parameter is ${10}
13 # echo The eleventh parameter is ${11}
14 # echo The total is $total
15 
16 # #讀取程序名,basename命令的做用:不顯示當前程序的完整路徑名,只顯示程序名
17 # name=`basename $0`
18 # echo The command entered is: $name
19 
20 # name=`basename $0`
21 # if [ $name = "chapter13" ];then
22 #     total=$[ $1 + $2 ]
23 # elif [ $name = "chapter12" ]; then
24 #     total=$[ $1 * $2 ]
25 # fi
26 # echo The calculated value is $total
27 
28 #######################################
29 #測試參數
30 #運行腳本前判斷是否須要加參數, -n檢測變量中是否含有數據
31 if [ -n "$1" ]; then
32     echo Hello $1, glad to meet you.
33 else 
34     echo "Sorry, you did not identify yourself."
35 fi
36 #######################################
37 #特殊參數變量
38 
39 #######################################
40 #######################################
41 #######################################
chapter13

控制腳本服務器

 1 #!/bin/bash
 2 #控制腳本
 3 
 4 #############################
 5 #最多見的Linux信號:SIGHUP/SIGINT/SIGQUIT/SIGKILL/SIGTERM/SIGSTOP/SIGTSTP/SIGCONT
 6 #                    1       2      3             9       15      17      18      19
 7 #                hang up/ 
 8 #生成信號
 9 #Ctrl+C 生成 SIGINT信號  如 $sleep 10  會等待10秒,按Ctrl+C會馬上返回
10 #Ctrl+Z 生成 SIGTSTP信號,中止shell中運行的任何進程,使用 $ps 查看中止的做業,加上au參數能夠查看詳細信息
11 #從新啓動已經中止的任務 $bg 做業號
12 
13 #捕捉信號 trap命令 trap commands signals (能夠用於有前後順序的兩個任務的自動執行)
14 trap "echo ' Sorry! I have trapped Ctrl-C'" SIGINT SIGTERM  #SIGTERM什麼用?
15 echo This is a test program
16 count=1
17 while [ $count -le 10 ]; do  #-le檢測count是否小於或等於10
18     echo "Loop #$count"
19     sleep 3
20     count=$[ $count + 1 ]
21 done
22 echo This is the end of the test program
23 
24 #捕捉腳本的退出 signals改成EXIT便可 trap commands EXIT 退出時執行commands (能夠用於有前後順序的兩個任務的自動執行)
25 
26 # #移除捕捉,
27 # trap - EXIT
28 
29 #############################
30 #之後臺模式運行腳本(針對運行時間較長又不想見到它的程序)
31 #在須要後臺運行的腳本後面加上 &
32 #能夠同時運行多個後臺做業
33 
34 #############################
35 #在非控制檯下運行腳本
36 #nohup命令 $nohup ./filename &
37 #使用此命令運行的腳本會忽略任何終端發過來的SIGHUP信號
38 #此命令會將文件執行的結果重定向到一個名爲 nohup.out 的文件中
39 
40 #進程狀態
41  #       D    不可中斷     Uninterruptible sleep (usually IO)
42  #    R    正在運行,或在隊列中的進程
43  #    S    處於休眠狀態
44  #    T    中止或被追蹤
45  #    Z    殭屍進程
46  #    W    進入內存交換(從內核2.6開始無效)
47  #    X    死掉的進程
48 
49  #    <    高優先級
50  #    N    低優先級
51  #    L    有些頁被鎖進內存
52  #    s    包含子進程
53  #    +    位於後臺的進程組;
54  #    l    多線程,克隆線程  multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
55 
56 #############################
57 #做業控制
chapter15

初識sed和gawk

  1 #!/bin/bash
  2 #文本處理
  3 
  4 #sed命令
  5 #文本替換,sed 命令不會保存修改的內容,
  6 sed 's/dog/cat/' testfile18
  7 #sed -n 's/cat/dog' testfile18     #不要爲每一個命令生成輸出,等待print命令來輸出
  8 
  9 #同時執行多個命令options:-e; 分號可使用bash中的次提示符來分隔命令;
 10 sed -e 's/brown/green/;s/dog/cat/' testfile18
 11 
 12 #從文件中讀取命令,針對有大量處理命令,能夠將這些處理命令存放在文件中
 13 sed -f script18 testfile18 >> testfile18pro
 14 
 15 #gawk命令  
 16 #gawk options program file
 17 #自動修改文本文件
 18     #功能:     定義變量保存數據
 19     #        使用算術和字符串操做符來處理數據
 20     #         使用結構化編程概念,增長邏輯
 21     #         提取數據文件中數據元素並將他們按另外一順序或格式放置,生成格式化報告
 22 
 23 #從命令行讀取程序腳本
 24 gawk '{print "Hello John"}'     #和sed編輯器同樣,gawk程序會針對數據流中的每行文本執行一遍程序腳本。
 25                                 #終止gawk:Ctrl+D (EOF)
 26 #數據字段變量 $0 $1 $2 …… $n
 27     # $0表示整個數據字段
 28     #顯示文本文件中每行的第1數據字段值
 29     gawk '{print $1}'         
 30     #顯示其餘文件中的字段 -F
 31     gawk -F : '{print $1}' /etc/passwd    #此處以:爲分隔符
 32     #如何指定字段的分隔符;默認的分隔符是什麼?
 33 
 34 
 35     #在程序腳本中使用多個命令
 36     echo "My name is Rich" | gawk '{$4="Christine"; print $0}'   #輸出結果是 My name is Christine
 37                                                                  #此處的echo並不會打印出結果,須要加上print $0
 38     
 39     #從文件中讀取程序
 40     gawk -F: -f gawk_script /etc/passwd  #從程序腳本gawk_script中調取程序
 41 
 42     #指定程序腳本什麼時候運行,BEGIN 關鍵字後指定的程序腳本會在gawk讀取數據前強制執行
 43     gawk 'BEGIN {print "Hello World!"}'
 44     gawk 'BEGIN {print "The script18 File Content:"} { print $0 }' script18
 45 
 46     #在處理數據後運行腳本
 47     gawk 'BEGIN {print "The script18 File Content:"} {print $0} END {print "END of File"}' script18
 48 
 49 
 50 #sed編輯器基礎
 51     
 52     #替換標記 命令 s/pattern/replacement/flags
 53         # n       表示新文本將會替換每行第幾處模式匹配的文本
 54         # g       代表新文本將會替換全部已有文本出現的地方
 55         # p       表示原來行的內容要打印出來
 56         # w file ,將替換的結果寫到文件中
 57     sed 's/test/trial/' sed_testfile1    #只能替換每行中出現的第一個word1
 58     sed 's/test/trial/2' sed_testfile1  #將每行中第二個出現的test字段替換爲trial
 59     sed 's/test/trial/g' sed_testfile1
 60     sed 's/test/trial/w sed_testfile2' sed_testfile1
 61 
 62     #替換字符
 63     #對於一些文本字符串中的字符不方便在替換模式中使用的狀況。例如:正斜線/,在文本中爲字符,可是在sed中經常使用作分隔符,因此須要\轉義.
 64     #如替換/etc/passwd中的/bin/bash爲/bin/csh,命名以下
 65     sed ‘s/\/bin\/bash/\/bin\/csh/’ /etc/passwd
 66     #sed編輯器容許使用其餘字符做爲substitute命令中的字符串分隔符,以下面使用感嘆號做爲分隔符
 67     sed ‘s!/bin/bash!/bin/csh!’ etc/passwd
 68 
 69     #使用地址,爲了使命令做用於特定的某行或某些行
 70     #格式:
 71     # [address]command
 72     # address{
 73     #     command1
 74     #     command2
 75     #     command3
 76     # }
 77     # 數字方式的行尋址
 78     sed '2s/dog/cat/' testfile18 >> testfile18pro
 79     sed '2,3/dog/cat/' testfile18 >> testfile18pro    #2-3行
 80     sed '2,$/dog/cat/' testfile18 >> testfile18pro    #從第2到最後一行
 81 
 82     #使用文本模式過濾器
 83     #格式: /pattern/command
 84     grep seeker /etc/passwd
 85     sed '/seeker/s/bash/csh/' /etc/passwd
 86 
 87     #組合命令
 88     sed '2{                #指定第2行
 89     > s/fox/elephant/
 90     > s/dog/cat/
 91     >}' testfile18
 92     sed '2,${
 93     >s/brown/green/
 94     >s/lazy/active/
 95     >}' testfile18
 96 
 97     #刪除行
 98     sed 'd' testfile18 #刪除全部行
 99     sed '3d' testfile18 #刪除第3行
100     sed '2,3d' testfile18
101     sed '2,$d' testfile18
102     #使用模式匹配匹配並刪除相應行
103     sed '/lazy cat/d' testfile18pro #刪除包含lazy cat的行
104     #使用文本模式匹配刪除範圍中的行
105     sed '/num 1/,/number 4/d' sedDelt
106     #注意必須使刪除操做最後可以中止,不然整個數據流都被刪掉了
107 
108     #插入和附加文本
109     #insert:在指定行前加一個新行
110     #append: 在指定行後加一個新行
111     echo "test line 2" | sed 'i\test line 1'
112     echo "test line 2" | sed 'i\test line 1'
113     sed '6a\new line 7' sedDelt 
114     sed '$a\new line 7' sedDelt
115     #插入或者附加多行文本
116     sed '1i\
117     >insert a line\
118     >insert another line' sedDelt
119     sed '1i\insert a line\ninsert another line' sedDelt #\n換行符
120 
121     #修改行
122     #change命令容許修改數據流中整行文本的內容。
123     sed '2c\changed line of text' sedDelt
124     sed '/number 3/c\change line include number 3' sedDelt    #修改匹配的任意行
125     sed '2,3c\changed line of text' sedDelt 
126 
127     #轉換命令
128     #惟一能夠處理單個字符的sed編輯器命令,對全部行有效
129     sed 'y/123/678/' sedDelt    #1->6 2->7 3->8
130     
131     #回顧打印
132     #打印行
133     echo "this is a test" | sed 'p'
134     sed -n '/num 1/p' sedDelt        #只打印匹配字段num 1的行,沒有-n的話會先把原來的打印一遍再把匹配的打印一遍
135     sed -n '2,3p' sedDelt
136     sed -n '/3/{p;s/num/test/p}' sedDelt
137      #打印行號
138      sed '=' sedDelt
139      sed -n '/num 1/{=;p}' sedDelt    #打印匹配num 1的行號和行內容
140 
141      #列出行
142      sed -n 'l' sedDelt    #打印格式是經過輸出格式控制符和轉義控制碼表示的,最後的$表示換行符
143 
144      #使用sed和文件一塊兒工做
145      #向文件寫入
146      sed -n '1,2w test' sedDelt #將sedDelt文件中的前兩行打印到test文件中
147      sed -n '/num/w INcustomers' sedDelt
148      #從文件中讀取數據
149      sed '3r data' sedDelt
150      sed '/num 1/r data' sedDelt
151      sed '$r data' sedDelt
152      sed '/number/{r data;d}' sedDelt
153 
154 #(完整版)
chapter18

正則表達式

  1 #!/bin/bash
  2 #成功使用sed和gawk程序的關鍵是熟練使用正則表達式。
  3 
  4 #正則表達式的類型
  5 #Linux下兩種流行的正則表達式引擎:
  6 #POSIX基本正則表達式(BRE)
  7     # #純文本,區分大小寫
  8     # echo "This is a test" | sed -n '/this/p'
  9     # echo "This is a test" | sed -n '/This/p'
 10     # echo "This is line number 1" | sed -n '/ber 1/p'
 11     # sed -n '/   /p' sedDelt                            #匹配多個空格
 12 
 13     # #特殊字符  .*[]^s{}\+?|()
 14     
 15     # #不能在文本模式中單獨使用特殊字符
 16     # #若要用特殊字符做爲文本字符必須使用反斜槓\轉義
 17  #     sed -n '/\$/p' data
 18  #     echo "\ is a sepcial character" | sed -n '/\\/p'
 19  #     #斜槓/也須要轉義
 20  #     echo "3/2" | sed -n '/\//p'
 21      
 22  #     #錨字符
 23  #     #鎖定在行首:脫字符^,定義從數據流中每一個文本行的行首開始的模式
 24  #     echo "The book store" | sed -n '/^book/p'    #不匹配
 25  #     echo "Books are great" | sed -n '/^Book/p'    #匹配
 26  #     echo "This ^ is a test" | sed -n '/s ^/p'    #脫字符放在除了行首其餘位置則當普通字符對待,這裏也是匹配的
 27 
 28  #     #鎖定在行尾:美圓符$,定義數據行必須以此文本模式結尾
 29  #     echo "There are a lot of good books" | sed -n '/books$/p'
 30 
 31  #     #組合錨點
 32  #     sed -n '/^this/p;/test.$/p' data        #這兩個篩選條件是或的關係
 33  #     sed -n '/^this is a test.$/p' data
 34  #     #使用兩個錨點直接組合過濾空白行
 35  #     sed '/^$/d' data
 36 
 37  #     #點字符 . :能夠匹配任意的單字符,除了換行符。點字符必須匹配一個字符,若此位置無字符,模式不成立
 38  #     sed -n '/.est/p' data
 39 
 40  #     #字符組:使用[]
 41  #     #限定匹配特定某些字符
 42  #     sed -n '/[ch]at/p' data
 43  #     sed -n '/[ ][dD]at/p' data    #[][]是對連續的兩個字符進行分別匹配
 44  #     sed -n '/[0123]/p' data
 45  #     sed -n '/^[0-9][0-9][0-9][0-9]$/p' data    #匹配只有四位數字的行
 46  #     #排除字符組:加脫字符^後,找不匹配[]中字符的行
 47  #     sed -n '/[^ch]at/p' data 
 48 
 49  #     #使用區間 單破則號-
 50  #     sed -n '/[c-h]at/p' data
 51  #     sed -n '/[a-ch-m]at/p' data #匹配a-c和h-m之間的字符
 52 
 53  #     #特殊字符組
 54  #     # [[:alpha:]]    #匹配任意字母字符,無論大小寫
 55  #     # [[:alnum:]]    #匹配任意字母數字字符0-9/A-Z/a-z
 56  #     # [[:blank:]]    #匹配空格或製表符
 57  #     # [[:digit:]]    #匹配0-9之間的數字
 58  #     # [[:lower:]]    #匹配小寫字母a-z
 59  #     # [[:print:]]    #匹配任意可打印字符
 60  #     # [[:punct:]]    #匹配標點符號
 61  #     # [[:space:]]    #匹配任意空白字符
 62  #     # [[:upper:]]    #匹配任意大寫字母字符A-Z
 63  #     echo "abc" | sed -n '/[[:digit:]]/p'
 64  #     echo "abc" | sed -n '/[[:alpha:]]/p'
 65 
 66  #     #星號 *
 67  #     #字符後放*,說明該字符會在匹配模式文本中出現0次或屢次
 68  #     #普遍用於處理有常見拼寫錯誤或不一樣語言中有拼寫變種的單詞
 69  #     echo "ik" | sed -n '/ie*k/p'    #打印ik
 70  #     echo "ieeek" | sed -n '/ie*k/p'
 71  #     echo "I'm getting a color TV" | sed -n '/colou*r/p'
 72  #     echo "I'm getting a colour TV" | sed -n '/colou*r/p'
 73 
 74  #     #.與*組合,匹配任意字符
 75  #     echo "this is a regular pattern expression" | sed -n '/regular.*expression/p'
 76 
 77  #     echo "baat" | sed -n '/b[ae]*t/p'
 78 
 79 #POSIX拓展正則表達式(ERE)
 80     #問號:相似於星號
 81     #問號代表前面的字符能夠出現0次或1次。
 82     # echo "bet" | gawk '/be?t/{print $0}'
 83     # echo "bt" | gawk '/be?t/{print $0}'        
 84     # echo "beeeet" | gawk '/be?t/{print $0}'        #無輸出
 85     # echo "baet" | gawk '/b[ae]?t/{print $0}'    #無輸出
 86     # echo "baet" | gawk '/b[a]?[e]?t/{print $0}'
 87 
 88     # #加號+
 89     # #代表前面的字符出現1次或屢次
 90     # echo "beeeet" | gawk '/be+t/{print $0}' 
 91     # echo "beaeat" | gawk '/b[ae]+t/{print $0}'
 92 
 93     # #花括號
 94     # #爲可重複的正則表達式指定一個上限。一般稱爲區間
 95     # echo "bt" | gawk --re-interval '/be{1}t/{print $0}'
 96  #     echo "bet" | gawk --re-interval '/be{1}t/{print $0}'    #只能出現一次
 97  #     echo "beeet" | gawk --re-interval '/be{1,2}t/{print $0}' #只能出現1-2次
 98 
 99     # echo "baet" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
100     # echo "baeaet" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
101     # echo "baeaet" | gawk --re-interval '/b[ae]{1,5}t/{print $0}'    #兩個字符加起來1-5個
102 
103     # #管道符號|:容許匹配時使用邏輯OR進行模式匹配
104     # echo "The cat is asleep" | gawk '/cat|dog/{print $0}'
105     # echo "The dog is asleep" | gawk '/cat|dog/{print $0}'
106     # echo "He has a hat"    | gawk '/[ch]at|dog/{print $0}'
107 
108     # #聚合表達式()
109     # #正則表達式也可使用()聚合起來。當你聚合正則表達式模式時,該組就會被當成標準字符。
110     # #你能夠給該組使用特殊字符,就跟你給正常字符使用同樣。
111     # echo "Satday" | gawk '/Sat(urday)?/{print $0}'    #判斷()中內容是否出現0次或1次,是則匹配
112     # echo "Saturday" | gawk '/Sat(urday)?/{print $0}'    
113     # echo "Saturdayurday" | gawk '/Sat(urday)?$/{print $0}'    
114     # echo "bab" | gawk '(c|b)a(b|t)/{print $0}'
115 
116 #實用中的正則表達式
117     #目錄文件計數
118     # echo $PATH
119     # mypath=`echo $PATH | sed 's/:/ /g'`
120     # count=0
121     # for directory in $mypath     #默認是以空格做爲分隔符的
122     # do
123     #     check=`ls $directory`
124     #     for item in $check
125     #     do
126     #         count=$[ $count + 1 ]
127     #     done
128     #     echo "$directory - $count"
129     #     count=0
130     # done
131 
132     #驗證電話號碼
133     cat phoneNumText | gawk --re-interval '/^\(?[2-9][0-9]{2}\)?(| |-|\.)[0-9]{3}( |-|\.)[0-9]{4}/{print $0}'
134 
135     cat phoneNumText | gawk --re-interval '/^\(?[2-9][0-9]{2}\)?( |-|\.)?[0-9]{3}( |-|\.)[0-9]{4}/{print $0}'
136 
137     #解析郵件地址
138     #Email格式:username@hostname
139     #username能夠是字母/數字/點號/單破則號/加號/下劃線
140     #hostname能夠是一個或多個域名和一個服務器名組成,域名和服務器名能夠是字母/數字/點號/下劃線,頂級域名只是字母。
141     gawk --re-interval '/^([a-zA-Z0-9_\-\.\+]+)@(a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/{print $0}'
chapter19

sed進階

 

gawk進階

 

使用數據庫

 

使用web

 

使用E-mail

 

編寫腳本實用工具

 

shell腳本編程進階

相關文章
相關標籤/搜索