正则表达式
正则表达式是处理字符串的方法,通过符号的辅助进行对字符串的搜索/删除/替换等操作。
按照不同的严谨度区分成了基础正则表达式和延伸正则表达式,延伸的正则除了简单的一组字串处理还可以做群组的字串处理。
另外注意,语系会对正则表达式的选择造成影响,因为某些语言编码中,字母大小写是交替出现的,这时如果我们使用A-Z这样的写法就会出现问题,所以我们可以先把语系改为en_us.utf8之类的。另外还可以使用诸如 [: alnum:] [: alpha:] [: blank:]
避免语系不通造成选择不准确的问题。
正则表达式
在系统中我们经常配合正则使用的一个命令就是grep
,主要用于字符串数据的比对,将符合条件的字符串按行打印出来,在处理字符串时也是以整行为单位进行处理的。
将基础的正则表达式用到的字符记录到下面的表格里面:
字符 | 意义 |
---|---|
^word | 搜寻的字串word在行首 grep -n '^#' test.txt |
word$ | 待搜寻的字串在行尾 grep -n '!$' text.txt |
. | 代表一定有一个任意的字符。 |
\ | 跳脱字符,去除特殊符号的特殊意义,仅当作普通字符 |
* | 重复0到无穷个前一个RE字符 (要注意可以是0个) ad(ad)*这才能保证至少一个ad |
[list] | []中仅代表一个待搜寻的字符A[abc]只要有Aa Ab 或者Ac都能匹配 |
[n1-n2] | []中的-表示两个字符之间的所有连续(编码)的字符,注意,不同的语系表现可能会不一样 |
[^list] | 排除[]中的字符与=,A[ ^bc] 匹配除了Ab与Ac之外的字符 (反响选择) |
\{n,m\} | 重复前一个RE字符n到m次,如果要指定确切的重复次数可以使用\{n\} grep -n 'go\{2,3}g' test.txt 匹配go和g之间有2到3个o存在的字符串。 |
下面的是扩充的正则表达式(配合grep 需要加-E 或者使用 egrep) | |
+ | 重复一个或一个以上前一个RE字符 如搜索god good goood 可以使用egrep -n 'go+d' text.txt |
? | 0个或者一个前一个RE字符 go?d 匹配gd 与 god |
竖线(避免冲突,所以是文字描述) | 用“或”的方式找出数个字串 如查找gd或good ‘gd“竖线”good’ 有其中一个的行便会被打印出来 |
() | 找出群组字串,[]仅仅是匹配里面的一串字符中的一个任意一个字符,而()是匹配整个字串 |
()+ | 多个重复字串的匹配,(xyz)+ 一个以上的xyz。 |