正则表达式(REGEXP),REGEXP:Reg


基础知识

元字符:含有特定含义的特殊字符。

REGEXP: Regular Expressions,是一种模式。通过使用元字符匹配文件中的字符或者字符串的

通配符: 是用来匹配文件名,不能用来匹配字符串(通配符只能用来匹配现有文件的,不能用来生成文件

正则表达式分类:

  • 基本正则表达式:

  • 扩展正则表达式:

基本正则表达式:需要加转义字符\ grep默认使用的就是基本正则表达式

扩展正则表达式:更简洁,书写的时候可以`不加转义字符(\)`了 。如:? + {n}等

正则表达式基本元字符:

第一类:字符匹配

  • 点(.)

  • 中括号:[]

点(.)  #单个任意字符(类似于通配符的 ?)


中括号 [] #表示其中的任意一个

	里面匹配出来的是纯小写或大写字符,不像通配符一样有小写有大写
	
	也支持通配符的写法 #例如表示小写字母: [[: lower :]]
	
	中括号里面放什么东西就是表示本身的含义 #比如: [.] -- 表示的就是点(.),不表示单个字符的意思
	
	[^] --- 除括号中指定字符外的任意一个字符

第二类:次数匹配:

描述一个字符出现多少次

  • \

  • 星号(*)

  • \?

  • \+

\{num\}  #前一个字符出现num次

	#需要加转移字符(\)

	表示前一个字符出现的次数:\{ num \}

	表示一个区间范围:\{n1,n2\}


*  #前一个字符出现任意次
	#通配符表示的是任意长度的字符

	#贪婪模式: 能匹配的都匹配出来

	#点星(.*):表示任意多个字符


\? #前面字符出现一次或者零次

	#因为通配符的?是一个字符的意思,通配符是shell的,运行的程序又是shell的子进程,所以加个转义字符。过了shell后就变成了? ,然后再给程序使用。

	#懒惰模式: 尽可能少匹配


\+  #前面的字符出现一次以上

第三类:位置锚定

  • 脱字符(^)

  • 美元符($)

^  #脱字符,表示整行的行首(行首锚定)

	行首后面跟个字符串 表示以这个字符串作为开头的行

	写在中括号里面的脱字符表示排除的意思 [^xx]


$  #整行的行尾(行尾锚定)

	#例如:string $ --- 以指定字符结尾的行

	#^str$ ---- 只包含str字符串的行(^$ --- 表示空行)

单词匹配:

linux中字母、数字、下划算都算单词,其他的就是单词的分界符

#连续的 字母、数字、下划线 才算单词

\< 或 \b 	#单词的词首

\> 或 \b 	#单词的词尾

\< str \> 	#整个单词

第四类:分组和其他功能

  • 分组

分组:使用小括号括起来形成一个整体,后面需要调用分组的时候用\num #num表的第几个分组
形成一个整体: \(  \)

例如: abc出现三次  \(abc\)\{3\}


或:| :使用的时候要加转义字符 \ #实现二选一的效果

正则表达式扩展元字符:

扩展元字符就是不加斜线表示转义。

基本正则表达式不加转义字符(\)。比如次数匹配类、单词匹配和分组的元字符。

例如:{}、()、?、+、|、<、>、b

支持正则表达式的工具:

grep、sed、awk、vim编辑器

范例:获取IP地址

ifconfig ens33 | grep -i inet | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | head -1

#简化:
ifconfig ens33 | grep -i inet | grep -o '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}' | head -1

相关内容