当前位置: 首页 > 科技观察

Linux正则表达式

时间:2023-03-15 20:41:22 科技观察

Linux正则表达式正则表达式和通配符的区别:正则表达式最常用的命令有grep(egrep)、sed、awk。正则表达式和通配符有本质区别。正则表达式用于查找:[文件]内容、文本、字符串。一般只有三剑客支持。通配符用于查找:文件名。常用命令支持正则表达式的分类。POSIX规范将正则表达式分为两种类型。基本正则表达式(BRE,basicregularexpression)高级特性:扩展正则表达式(ERE,extendedregularexpression)BRE和ERE的区别只是元字符的区别BRE(BasicRegularExpression)只识别元字符^$.[]*Other字符被识别为普通字符:\(\)ERE(ExtendedRegularExpression)adds(){}?+|等。字符(){}只有在用反斜杠转义时才会被视为BRE中的元字符“\”,而在BRE中,任何元符号前面都有一个反斜杠,反而导致它被视为普通字符。基本正则表达式字符说明^^word:搜索以word$开头的内容word$:搜索以word结尾的内容^$表示空行,不是空格。它代表且只能代表任意字符(不匹配空行)\转义字符,让有特殊含义的字符脱掉马甲,显出原形,如\。only表示一个小数点*重复前面的字符或文本0次或多次,前面的文本或字符连续0次或多次。*任意数量的字符^.*以任意数量的字符串开始,尽可能多。*越多越好,贪婪的[^abc]匹配任何不包含^的字符a、b、c,是对[abc]的倒置,与^a\{n的意义不同,m\}重复前一个字符n到m次(如果使用egrep或sed-r,可以去掉斜杠)a\{n,\}重复前一个字符至少n次,如果使用egrep或者sed-r,可以去掉斜杠a\{n\}重复前面的a字符n次,如果用egrep或者sed-r,可以去掉斜杠------扩展正则表达式ERE特殊字符号含义同句子+重复前一个字符一次或多次,前一个字符连续一个或多个,取出连续的文/字?重复前一个字符0次或1次(。是的,只有1次)管道符号|同时表示或过滤多个字符()分组过滤封闭的东西代表一个整体(一个字符) 管道符号|():分组过滤封闭的东西代表一个整体(一个字符)最早的一个文本匹配程序,它使用POSIX定义的基本正则表达式(BRE)来匹配文本·grep-E强制grep不转义,直接识别正则符号。egrep相当于grep-E,可以自然识别规则符号。我们通常通过cp文件名{,.bak}的形式备份,避免再次键入文件名·sed-r:让sed支持基本正则化和扩展正则化的正则化,区分基本正则BRE扩展正则ERE\??以上是需要转义字符配合表达式的正则表达式,扩展正则是让命令扩大权限,让他直接识别正则表达式符号(egrep,sed-r,awk直接支持)补充note1一些预定义的:正则表达式描述的例子[:alnum:][a-zA-Z0-9]匹配任何字母数字字符[[:alnum:]]+[:alpha:]匹配任何字母数字字符(包括大写和小写letters)[[:alpha:]]{4}[:blank:]空格和制表符(水平和垂直)[[:blank:]]*[:digit:]匹配任何数字字符[[:digit:]]?[:lower:]匹配小写字母[[:lower:]]{5,}[:upper:]匹配大写字母([[:upper:]]+)?[:punct:]匹配标点符号[[:punct:]][:space:]匹配任何空白字符,包括换行符、回车等[[:space:]]+[:graph:]匹配任何可见和可打印的字符[[:graph:]][:xdigit:]任何十六进制数[[:xdigit:]]+[:cntrl:]任何控制字符(ASCII字符集中的前32个字符)[[:cntrl:]][:print:]anyprintablecharacter[[:print:]]2-charactermetacharacter是Perl风格的正则表达式,只有部分文本处理工具支持,并非所有文本处理工具都支持正则表达式描述示例\bwordboundary\bcool\b匹配cool,不匹配coolant\B非词边界cool\B匹配coolant但不匹配cool\d单个数字字符b\db匹配b2b,不匹配bcb\D单个非数字字符b\Db匹配bcb不匹配b2b\w单个单词字符(字母、数字和_)\w匹配1或a,不匹配&\W单个非单词字符\W匹配&,不匹配1或一个\n换行符\n匹配换行符\s单个空白字符x\sx匹配xx,不匹配xx\S单个非空白字符x\S\x匹配xkx,不匹配xx\r回车符\r匹配回车符\t水平制表符\t匹配水平制表符\v垂直制表符\v匹配垂直制表符\f换页符\f匹配换页符