內容均來自《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 #############################################
走進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
經常使用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
構建基本腳本數據庫
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 ##################################
使用結構化命令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 ##################################
更多的結構化命令編程
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 #############################################
處理用戶輸入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 #######################################
控制腳本服務器
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 #做業控制
初識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 #(完整版)
正則表達式
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}'
sed進階
gawk進階
使用數據庫
使用web
使用E-mail
編寫腳本實用工具
shell腳本編程進階