linux正则表达式
. 一个字符 .. 两个字符 .* 至少一个 ^ 开头 $ 结束 [abc] 包含a或b或c的都匹配 ,匹配单个字符 [^abc] 只要出现了abc这三个字母以外的字符就都匹配,排除 ^[abc] 以a开头或以b开头或以c开头 ^[^abc] 不以a开头或不以b开头或不以c开头 a+ 匹配至少一个或多个a a* 匹配0或多个a 大写 [[:upper:]] [A-Z] 小写 [[:lower:]] [a-z] 字母 [[:alpha:]] [a-Z] 字母数字 [[:alnum:]] 空格或者制表符 [[:blank:]] 纯数字 [[:digit:]] [0-9] 标点符号 [[:punct:]] 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。
正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。 grep 在文件里查找某个关键字 显示查出的行在原文件的行号加n参数 grep -n root /etc/passwd 反向查找加v参数 grep -v bin /etc/passwd ps -ef | grep sshd | grep -v grep 大小写不敏感加i参数 grep -ni root grep.txt 扩展grep # egrep "root|ftp|adm" /etc/passwd --同时查找多个关键字 # grep -E "root|ftp|adm" /etc/passwd 统计root在/etc/passwd里出现了几次 grep -o root /etc/passwd |wc -l # cat 1.txt 111 222 333 444 555 666 # cat 2.txt aaa bbb 333 ccc ddd 555 # grep -f 1.txt 2.txt --找出两个文件里重复的行 333 555 # diff 1.txt 2.txt --查找不同 # ifconfig |grep -A 1 vmnet vmnet1 Link encap:Ethernet HWaddr 00:50:56:C0:00:01 inet addr:1.1.1.1 Bcast:1.1.1.255 Mask:255.255.255.0 -- vmnet8 Link encap:Ethernet HWaddr 00:50:56:C0:00:08 inet addr:192.168.56.1 Bcast:192.168.56.255 Mask:255.255.255.0 查找出有rot或者是rat的行 grep -n r[oa]t grep.txt --注意的是,[]括号内不论几个字符,都是选一个 查找一个非r字符加oot连在一起的行 grep '[^r]oot' grep.txt 查找非小写字母连着一个oo的行 grep '[^a-z]oo' grep.txt --记住: [] 里的^为取反 ,外面的为以它开头 # grep ^[br][oa]t grep.txt grep [^a-z] grep.txt 查找非全部为小写字母的字符串行 查找至少包含一个非小写字母的字符行 # grep '^[a-z]oot' grep.txt root boot # grep '[^a-z]oot' grep.txt Root Boot # cat test root Root rot boot Rot 111 222 ,123 .456 haha hello A1234 A123 A12 A1 # grep '[^A-Z]o' test --查找二个小写字符一起的字符串,第一个是任意字符,第二个是o root Root rot boot # grep '[^A-Z]oo' test root boot # grep '^[^A-Z]' test --不以大写开头的行 root rot boot # grep '^[^a-z]' test --不以小写开头的行 查找不以大写字母开头 grep '^[^[:upper:]]' grep.txt grep '^[^A-Z]' grep.txt grep -v '^[A-Z]' grep.txt 查找有数字的行 grep '[0-9]' grep.txt 或者 grep [[:digit:]] grep.txt 查找一个数字和一个字母连起来的行 grep -E '[0-9][a-Z]|[a-Z][0-9]' grep.txt 查找不以r开头的 grep -v ^r grep.txt grep ^[^r] grep.txt 查找以数字开头的 grep ^[0-9] grep.txt grep ^[[:digit:]] grep.txt 查找以大写字母开头的 grep ^[A-Z] grep.txt 或者 grep ^[[:upper:]] grep.txt 查找以小写字母开头的 grep ^[a-z] grep.txt 或者 grep ^[[:lower:]] grep.txt 查找以点结束的 grep "\."$ grep.txt --注意要引起来,而且要转义 grep "\*"$ grep.txt 去掉空格行 cat grep.txt |grep -v ^$ --以^$表示空格行 查找完全匹配abc的行 grep ^abc$ grep.txt 查找到A后有三个数字的行 egrep A[0-9]{3} # cat test root Root rot boot Rot 111 222 ,123 .456 haha hello A1234 A123 A12 A1 A # egrep A[0-9]* test --查找A后有0到多个数字 *表示前一个字符有0个或多个 A1234 A123 A12 A1 A # egrep "A[0-9][0-9]*" test --查找A后有1到多个数字,所以相对于上面的显示,最后一行没有了(等同于egrep -n "A[0-9]+" grep.txt) A1234 A123 A12 A1 # egrep A[0-9]+ test -- +号意思是前一个字符有1个或多个 A1234 A123 A12 A1 ----------------------------- . 点号代表一个任意字符 * 代表零个或者多个前字符 + 代表一个或者多个前字符 .* 代表0个或多个任意字符 ..* 代表非空的任意字符 # cat grep.txt ggle gogle google gooogle gagle gaagle gaaagle abcgef abcdef goagle aagoog wrqsg grep g. grep.txt --g后边有一个任意字符 grep g* grep.txt --结果比较怪 grep "g*" grep.txt --结果比较怪 grep g.g grep.txt --g和g之间有一个任意字符 grep g*g grep.txt --包含1个或多个g的行 grep go.g grep.txt grep go.*g grep.txt grep go*g grep.txt grep go..*g grep.txt grep go.*.g grep.txt grep g*.*g grep.txt