第十一部分_Shell脚本之正则表达式


正则表达式

1. 正则表达式是什么?

正则表达式(Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,是一种字符模式,用于在查找过程中匹配指定的字符。

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。

正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。

支持正则表达式的程序如:locate |find| vim| grep| sed |awk

2. 正则能干什么?

  1. 匹配邮箱、匹配身份证号码、手机号、银行卡号等
  2. 匹配某些特定字符串,做特定处理等等

3. 正则当中名词解释

  • 元字符

    指那些在正则表达式中具有特殊意义的专用字符,如:点(.) 星(*) 问号(?)等

  • 前导字符

    位于元字符前面的字符. abc* aooo.

4. 第一类正则表达式

㈠ 正则中普通常用的元字符

元字符 功能 备注
. 匹配除了换行符以外的任意单个字符
* 前导字符出现0次或连续多次
.* 任意长度字符 ab.*
^ 行首(以…开头) ^root
$ 行尾(以…结尾) bash$
^$ 空行
[] 匹配括号里任意单个字符或一组单个字符 [abc]
[^] 匹配不包含括号里任一单个字符或一组单个字符 [^abc]
[1] 匹配以括号里任意单个字符或一组单个字符开头 [2]
^[^] 匹配不以括号里任意单个字符或一组单个字符开头 ^[^abc]
  • 示例文本
# cat 1.txt
ggle
gogle
google
gooogle
goooooogle
gooooooogle
taobao.com
taotaobaobao.com

jingdong.com
dingdingdongdong.com
10.1.1.1
Adfjd8789JHfdsdf/
a87fdjfkdLKJK
7kdjfd989KJK;
bSKJjkksdjf878.
cidufKJHJ6576,

hello world
helloworld yourself

㈡ 正则中其他常用元字符

元字符 功能 备注
/< 取单词的头
/> 取单词的尾
/< /> 精确匹配
/{n/} 匹配前导字符连续出现n次
/{n,/} 匹配前导字符至少出现n次
/{n,m/} 匹配前导字符出现n次与m次之间
/( /) 保存被匹配的字符
/d 匹配数字(grep -P [0-9]
/w 匹配字母数字下划线(grep -P [a-zA-Z0-9_]
/s 匹配空格、制表符、换页符(grep -P [/t/r/n]

举例说明:

需求:将10.1.1.1替换成10.1.1.254

1)vim编辑器支持正则表达式
# vim 1.txt
:%s#/(10.1.1/).1#/1.254#g 
:%s//(10.1.1/).1//1.254/g 

2)sed支持正则表达式【后面学】
# sed -n 's#/(10.1.1/).1#/1.254#p' 1.txt
10.1.1.254

说明:
找出含有10.1.1的行,同时保留10.1.1并标记为标签1,之后可以使用/1来引用它。
最多可以定义9个标签,从左边开始编号,最左边的是第一个。


需求:将helloworld yourself 换成hellolilei myself

# vim 1.txt
:%s#/(hello/)world your/(self/)#/1lilei my/2#g

# sed -n 's//(hello/)world your/(self/)//1lilei my/2/p' 1.txt 
hellolilei myself

# sed -n 's/helloworld yourself/hellolilei myself/p' 1.txt 
hellolilei myself
# sed -n 's//(hello/)world your/(self/)//1lilei my/2/p' 1.txt 
hellolilei myself

Perl内置正则:
/d      匹配数字  [0-9]
/w      匹配字母数字下划线[a-zA-Z0-9_]
/s      匹配空格、制表符、换页符[/t/r/n]

# grep -P '/d' 1.txt
# grep -P '/w' 2.txt
# grep -P '/s' 3.txt

㈢ 扩展类正则常用元字符

丑话说在前面:

我说我比较特殊,你要相信!否则我错给你看

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/244514.html

(0)
上一篇 2022年4月17日
下一篇 2022年4月17日

相关推荐

发表回复

登录后才能评论