linux学习笔记6 正则表达式

正则表达式

正则表达式是处理字符串的方法,通过符号的辅助进行对字符串的搜索/删除/替换等操作。

按照不同的严谨度区分成了基础正则表达式和延伸正则表达式,延伸的正则除了简单的一组字串处理还可以做群组的字串处理。

另外注意,语系会对正则表达式的选择造成影响,因为某些语言编码中,字母大小写是交替出现的,这时如果我们使用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
竖线(避免冲突,所以是文字描述)用“或”的方式找出数个字串 如查找gdgood ‘gd“竖线”good’ 有其中一个的行便会被打印出来
()找出群组字串,[]仅仅是匹配里面的一串字符中的一个任意一个字符,而()是匹配整个字串
()+多个重复字串的匹配,(xyz)+ 一个以上的xyz。

配合正则使用的命令

sed

awk

comments powered by Disqus
本站访客数:
Built with Hugo
主题 StackJimmy 设计