bash正则表达式
星号*:
匹配它前面的字符串或正则表达式任意次(包括0次)。 比如:1122* 可能匹配的字符串有:112、1122、1122222、1123131231 ......
句号.:
匹配除换行符之外的任意一个字符。 比如:"112.",将匹配112+至少一个字符 可能匹配的字符串有:1121、1122、112abc、1123131231 ......,但不匹配112
插入符号^:
匹配一行的开始,但有时依赖于上下文环境,可能表示否定正则表达式中一个字符串的意思。
比如:“^abc”只匹配行首为abc的字符串
美元符$:
在一个正则表达式的末尾,匹配一行的结尾。 比如:"123$",将只能匹配到行尾为123的字符行,"^$"匹配匹配一个空行。
方括号[]:
匹配方括号内指定的字母集中的一个字符。 比如:"[abc]",将匹配字符a、b、c中的任意一个字符;而"[^abc]",将匹配除abc之外的所有字符。
反斜线符号\:
转义一个特殊的字符,使这个字符得到字面意义的解释。 比如:"\$",将表示它的原意"$";"\\",表示"\"。
转义尖括号\<\>:
用于标记单词边界。尖括号必须是转义的,否则它们只是字符的字面含义。 比如:"\<the\>"匹配"the",但不匹配"them","there"。
问号?:
匹配0个或1个前面的字符,用于匹配单个字符。 比如:"ab?c",将匹配"ac"或"abc"。
加号+:
匹配一个或多个前面的字符,它和星号*很相似,单它不匹配0个字符的情况。 比如:"ab+c"将匹配"abc","abbc","abbb...c"等。
转义波形括号\{\}:
指示匹配前面正则表达式的次数。波形括号必须是转义的,否则只有字符的字面含义。 比如:"[0-9]\{5\}"将匹配5位数字。
圆括号():
包含一组正则表达式。与"|"或expr操作符一起使用。
竖线|:
正则表达式的"或"操作符匹配一组可选的字符。 比如:"a(b|c)d"将匹配"abd"或"acd"。
正则表达式比较操作符:
[weblogic@etpmalldev6 logs]$ digit=132 [weblogic@etpmalldev6 logs]$ [[ $digit =~ [0-9] ]] [weblogic@etpmalldev6 logs]$ echo $? 0 [weblogic@etpmalldev6 logs]$ digit="sfsfs" [weblogic@etpmalldev6 logs]$ [[ $digit =~ [0-9] ]] [weblogic@etpmalldev6 logs]$ echo $? 1
实例:
测试数据:
[weblogic@etp-mall-dev7][/tpdata/shell_script]$ cat list.txt 1122 112 11222 2211 22111 1122222112 3131231112112 abdde abede bbcdefss bbdde the people's replublic of China fafslk;kfak fdoutjjlsjpwkfks fasfsaFSAFSFSAF FSAFSFAFFS abdabeccde
查找包含字符串"112"且其后至少有一个字符的行:
[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "112." list.txt 1122 11222 1122222112 3131231112112
查找字符"d"和"e"之间有一个任意字符的行:
[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "d.e" list.txt abdde bbdde
查找在字符"2"后有两个任意字符的行:
[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "2.." list.txt 11222 2211 22111 1122222112 3131231112112
查找/etc/passwd文件中root账号的信息,不使用插入符号^匹配:
[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "root" /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
查找/etc/passwd文件中root账号的信息,使用插入符号^匹配:
[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "^root" /etc/passwd root:x:0:0:root:/root:/bin/bash
查看有空行有多少行:
[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "^$" list.txt | wc -l 1
查看所有匹配112*的行:
[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "112*" list.txt 1122 112 11222 2211 22111 1122222112 3131231112112
查看所有以数字"3"开头,"2"结尾的行:
[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "\<3.*2\>" list.txt --color 3131231112112
查看文件中含有至少11个连续小写字母的行:
[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "[a-z]\{8\}" list.txt bbcdefss the people's replublic of China fdoutjjlsjpwkfks abdabeccde