shell(正则表达式)


正则表达式的学习

一、正则表达式使用场景:

# linux: vim  grep  sed  awk 
# 作用;用于匹配文本字符串中符合正则的字符,其实就是过滤文本字符串

实例:
匹配数字: ^[0-9]+$  匹配数字1个或多个
匹配Mail: [a-z0-9A-Z_]+@[a-zA-Z0-9]+\.[a-z]+ 	
匹配IP: ([0-9]{1,3}\.){3}[0-9]{1,3}

二、shell的通配符与正则的元字符的关系

# 首先搞清楚:
	1、shell本身是不支持正则的,只是有些文本筛选工具里支持用正则里的元字符来匹配文本字符串,如grep sed awk vim/vi
	2、正则里的元字符是包含shell中的通配符的

#使用区别:
	shell通配符用于文件名匹配,它是由shell解析的,比如find,ls,cp,mv等
	正则元字符适用于建立匹配规则的,用于筛选文本数据的

#shell中有哪些常用的通配符、特殊字符及其含义;

在shell中,匹配[]里面的字符时,是不区分大小写的,但是正则里严格区分大小写

shell中常用的通配符 含义 实例
* 匹配0或多个字符! a*b表示要么ab,要么axxxxxb,跟正则不一样,不是b、ab、 aab、 aaaab,不需要为*前面字符服务
匹配1个也必须1个任意字符! a?b,可以是aab abb axb
[123] 匹配列表中任意1个字符
[!]或[^123] 匹配除列表中任意1个字符
[a-b] 匹配列表a到b中任意1个字符字符
[!a-b]或[^a-b] 匹配不在a到b间任意1个字符
{a,b,...} 匹配a或b或列表中任意1个字符

#shell中的常用特殊字符

特殊字符 含义 实例
= 定义赋值变量 定义a="asd" 调用$a 或${a}
$ 变量的调用 同上
> 数据流重定向 file1 > file2 或 命令 > file !就是把结果导入
< 数据流重定向 同上,只是导入方向相反
| 接受命令结果的管道符号 ls | grep ' a*b' ! 把ls命令结果给到后面命令作筛选
& 不太清楚
() 可以作数组$(1 2 3),也可以作运算、命令的替换 1. a=$(命令)等同a=`命令` 把命令结果赋值给a;2. 定义数组data=(n1 n2 n3),调用数组元素${data[index]}
{} 调用变量时作为界定变量名的边界, 1、ab_c="hello" ,千万别这样ab-c=“hello world”,被坑过!变量名之间不能用 - ,2、调用${ab_c},${ab_c:1:3}从下标(o开始算)1取3个,${ab_c:1}=${ab_c:1:4} 不写步长默认取后面所有 3、${ab_c/l/a} 把第一个l换成a 或${ab_c//l/a} 把所有l换成a 4、${ab_c#*l} 结果为lo 或 ${ab_c##*l} 结果为 o 5、${ab_c%l* } 结果为 hel 或 ${ab_c%%l*} 结果为 he
; 承接上一个命令,类似于| 我的理解等同|
|| 或运算符 {
&& 与运算符 [[ 表达式1 ]] && [[ 表达式2 ]]; echo $? , 要两个表达式成立为真就结果为真
! 非运算 [[ !- z '']] = [[ -n '' ]]
# 脚本注释 #!/bin/bash
\ 字符转义:把通配符、元字符去特殊其含义,就显示本来样子

正则的元字符

元字符 含义
* 匹配前面那个字符0次或多次,就是前面那个字符可有可无
. 匹配任意一个字符(除换行回车外), 等同于shell里面的?
? 匹配前面字符0个或1个
^ 匹配是否以后面的字符或字符组为开头
[1] 匹配以[]里面开通的任意一个字符开头的
[^] 匹配除[]里面的字符外所有任意单个字符
[] 匹配以除[]里面字符外所有任意单个字符
$ 匹配是否以前面的字符或字符组为为结尾
[] 匹配[]里面的任意一个字符集
\ 转义或屏蔽一个元字符的特殊意义
[a-b] 匹配任意一个在a到b范围内的字符
+ 匹配前面字符1个或多个个
() 就是把1个或多个字符捆在一起当成1个字符
| 就是或的意思a
\<a 匹配词首以a开头的单词
a\> 匹配词尾以a位结尾的单词
\<ab\> 只匹配ab这个字符整体
\(1.2.3.\)4 把1.2.3.作为一个整体字符!如我想把1.2.3.4换成1.2.3.5, 则/\(1.2.3.\)4/ \15/
x\{n\} 匹配x重复出现n次
x\{n,\} 匹配x重复出现n次以上
x\{n,m\} 匹配x出现n到m次

正则元字符总结:

1、 * ? + {} 都是为了服务于前面那个字符而生的,不能独立存在!如果前面字符是(),那就是服务于字符组()里面字符
2、\w等同[a-zA-Z0-9]
	\W等同[^a-zA-Z0-9]

  1. ↩︎


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM