11、正则表达式(regular expression): 正则表达式(regular expression)是一种文本模式,描述了一种字符串匹配的模式(pattern),包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。使用该模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。或这种模式,描述了在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。模式中由5类字符组成:
1)普通字符 [A-Za-z0-9_] //所有大写和小写字母、所有数字、所有标点符号和一些其他符号
2)非打印字符 \cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。 \f 匹配一个换页符。等价于 \x0c 和 \cL。 \n 匹配一个换行符。等价于 \x0a 和 \cJ。 \r 匹配一个回车符。等价于 \x0d 和 \cM。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。 \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 \t 匹配一个制表符。等价于 \x09 和 \cI。 \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。 \w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
3)特殊字符 所谓特殊字符,就是一些有特殊含义的字符。‘*’,'+‘和’?'这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或更多”,“一次或更多”还有“没有或一次”。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面;
4)限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。
示例:
[0-9]* 表示任意多个数字; 在方括号里用 '^'表示不希望出现的字符,'^'应在方括号里的第一位; "(b¦cd)ef":表示"bef"或"cdef"; 1 2 3 请注意表示范围:必须指定范围的下限;如:"{0,2}"而不是"{,2}"。 2)'','+'和'?'相当于"{0,}","{1,}"和"{0,1}"。 3)'¦',表示“或”操作。在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位,在方括号中,不需要转义字符。 4) 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个? 就可以实现非贪婪或最小匹配。通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从"贪婪"表达式转换为"非贪婪"表达式或者最小匹配。 5)其他字符匹配(Java正则表达式): \d :匹配一个数字字符。[0-9] \D :匹配一个非数字字符。[^0-9] \w :匹配包括下划线的任何单词字符。[0-9a-zA-Z_] \W :匹配任何非单词字符。[^\w] \s :匹配任何空白字符 空格、制表符、换行符 \S :匹配任何非空白字符。 1 2 3 4 5 6 7 8 9 10 11 5)定位符
定位符使您能够将正则表达式固定到行首或行尾。定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。
注意:不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。
若要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符。不要将 ^ 的这种用法与中括号表达式内的用法混淆。若要匹配一行文本的结束处的文本,请在正则表达式的结束处使用 $ 字符。 \B 非单词边界运算符,位置并不重要,因为匹配不关心究竟是单词的开头还是结尾。
匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:\n\s*\r 评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(\S*?)[^>]>.?</\1>|<.? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 匹配首尾空白字符的正则表达式:^\s|\s* 评注:表单验证时很实用 匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7} 评注:匹配形式如 0511-4405222 或 021-87888822 匹配腾讯QQ号:[1-9][0-9]{4,} 评注:腾讯QQ号从10000开始 匹配中国邮政编码:[1-9]\d{5}(?!\d) 评注:中国邮政编码为6位数字 匹配身份证:\d{15}|\d{18} 评注:中国的身份证为15位或18位 匹配ip地址:\d+.\d+.\d+.\d+ 评注:提取ip地址时有用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 匹配特定数字:
^[1-9]\d* //匹配负整数 ^-?[1-9]\d* //匹配非负整数(正整数 + 0) ^-[1-9]\d*|0 //匹配正浮点数 ^-([1-9]\d*.\d*|0.\d*[1-9]\d*) //匹配浮点数 ^[1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0 //匹配非正浮点数(负浮点数 + 0) 1 2 3 4 5 6 7 8 9 10 匹配特定字符串:
^[A-Za-z]+ //匹配由26个英文字母的大写组成的字符串 ^[a-z]+ //匹配由数字和26个英文字母组成的字符串 ^\w+ //匹配由数字、26个英文字母或者下划线组成的字符串 1 2 3 4 5 12、高级命令组合 SHELL显示多个信息,用EOF cat << EOF +--------------------------------------------------------------+ | === Welcome to Nginx Home === | +--------------------------------------------------------------+ EOF 1 2 3 4 5 获取IP地址 ifconfig eth0 |grep “inet addr:” |awk ‘{print 2}’|cut -c 6- //6-表从左第6个字符开始获取 ifconfig eth0 |grep "inet " |awk ‘{print 2}’|cut -c 6- 或者 ifconfig | grep ‘inet addr:’| grep -v ‘127.0.0.1’ | cut -d: -f2 | awk ‘{ print 1}’ ifconfig | grep 'inet '| grep -v ‘127.0.0.1’ | cut -d: -f2 | awk ‘{ print $2}’
获取内存 free -m |grep “Mem” | awk ‘{print $2}’
查看连接某服务端口最多的的IP地址 netstat -an -t | grep “:80” | grep ESTABLISHED | awk ‘{printf “%s %s\n”,6}’ | sort
查看Apache的并发请求数及其TCP连接状态: netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
统计某一类文件大小 eg1:find / -name *.jpg -exec wc -c {} ;|awk ‘{print 1}’|awk ‘{a+=1}END{print a}’
清除僵死进程 ps -eal | awk ‘{ if (2 == “Z”) {print 4}}’ | kill -9