kwseeker

学编程:找代码,读代码,改代码,写代码;少看书。但少看不是不看,看一本书要限制在一天内。任务是通读书中主要的概念,明白大致是干什么用的,形成一个大概的框架;然后一周内干掉书中全部代码,代码不理解再浏览书中相关章节,注意是浏览。或者刷博客。代码实在刷不懂,可以先刷后面,待日后重新刷;因为书中代码有些部分可能出自后面的章节。代码总是在多次刷过之后,拨开乌云见日月的。。。

导航

Linux Shell编程

内容均来自《Linux命令行与shell脚本编程大全》

尚待补充完整,和添加较为实际的应用案例......

 

初识别Linux Shell

 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命令

#!/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

使用结构化命令

 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

处理用户输入

 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脚本编程进阶

 

posted on 2015-09-28 19:25  kwseeker  阅读(366)  评论(0编辑  收藏  举报