Shell编程之正则表达式

文章目录

  • 前言
  • 一、正则表达式
    • 1、正则表达式定义
    • 2、正则表达式层次
      • 基础正则表达式BRE
      • 扩展正则表达式ERE
  • 二、文本处理工具
    • 1、sort排序
    • 2、uniq去重
    • 3、tr修改
    • 4、cut列举
  • 总结


前言

正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。


一、正则表达式

1、正则表达式定义

①正则表达式(别称):正规表达式、常规表达式
②使用字符串来描述、匹配一系列符合某个规则的字符串
③正则表达式组成
普通字符
大小写字母、数字、标点符号及一些其他符号
元字符
指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

2、正则表达式层次

基础正则表达式BRE

基础正则表达式是常用的正则表达式部分
除了普通字符外,常见到以下元字符

\ :转义字符,用于取消特殊符号的含义,例: \!、\n、\$等

^ :匹配字符串开始的位置,例: ^a、 ^the、 ^#、^[a-z]

$ :匹配字符串结束的位置,例: word$、 ^$匹配空行

. :匹配除\n之外的任意的一个字符,例: go.d、 g..d

* :匹配前面子表达式0次或者多次,例: goo*d、 go.*d

[list] :匹配list列表中的一个字符,例: go[ola]d, [abc][a-z][a-z0-9][0-9]匹配任意一位数字

[^list] :匹配任意非list列表中的一个字符,例: [^0-9][^A-20-9][^a-z]匹配任意一位非小写字母

\{n\} :匹配前面的子表达式n次,例: go\{2\}d、 '[0-9]\{2\} '匹配两位数字

\{n,\} :匹配前而的子表达式不少于n次,例: go\{2, \}d、'[0-9]\{2, \}'匹配两位及两位以上数字

\{n,m\} :匹配前面的子表达式n到m次,例: go\{2,3\}d、 ' [0-9]\{2,3\}'匹配两位到三位数字

#注意: egrep、 awk使用{n}、{n,小、{n, m}匹配时“{}”前不用加“\”

扩展正则表达式ERE

扩展正则表达式是对基础正则表达式的扩充深化
扩展元字符如下

+ :匹配前面子表达式1次以上,例: go+d, 将匹配至少一个o, 如god、 good、 goood等

? :匹配前面子表达式0次或者1次,例: go?d, 将匹配gd或god

() :将括号中的字符串作为h一个整体,例1: g(oo)+d," 将匹配oo整体1次以上,如good、gooood等

| :以或的方式匹配字条串,例: g (oo|la)d," 将匹配good或者glad


二、文本处理工具

1、sort排序

sort是一个一行为单位对文件进行排序的工具,也可以根据不同的数据类型来排序。例如:数据和字符的排序就是不一样的

sort [选项] 参数

##参数如下:

	-b 忽略每行前面开始出的空格字符。
		#无法读取zn_UTF-8汉字
	-k:指定排序区域,在那个区间排序
		#可以读取zn_UTF-8汉字
	-n 依照数值的大小排序。
	 
	-u 意味着是唯一的(unique),输出的结果是去完重了的。

	-o<输出文件> 将排序后的结果存入指定的文件。
	
	-r 以相反的顺序来排序。
	
	-t<分隔字符> 指定排序时所用的栏位分隔字符。

Shell编程之正则表达式_第1张图片
Shell编程之正则表达式_第2张图片
也可以将sort命令与uniq命令组合使用,以实现去重并排序的需求
Shell编程之正则表达式_第3张图片

2、uniq去重

uniq主要是用于去除连续的重复行
注意,是连续的行,所以通常和sort命令结合使用先排序使之变成连续的行再执行去重操作,否则不连续的重复行他不能去重。

uniq [选项] 参数
##常用参数如下:
	
	-c:在每列旁边显示该行重复出现的次数。
	
	-d:仅显示重复出现的行列。

	-f:忽略比较指定的栏位。
	 
	-s:忽略比较指定的字符。
	
	-u:仅显示出一次的行列

Shell编程之正则表达式_第4张图片
Shell编程之正则表达式_第5张图片
在这里插入图片描述

3、tr修改

tr可以用一个字符来替换两一个字符,或者可以完全出去一些字符,也可以用它来出去重复字符

tr [选项]... SET1 SET2
	#从标准中替换、缩减和(或)删除字符,并将结果写到标准输出
	
##常用参数如下:

	-c:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
	 
	-d:删除指令字符
	 
	-s:缩减连续重复的字符成指定的单个字符


Shell编程之正则表达式_第6张图片
Shell编程之正则表达式_第7张图片
删除换行
在这里插入图片描述
Shell编程之正则表达式_第8张图片

4、cut列举

cut是常见的截取工具
cut命令从文件的每一行剪切字节、字符和字段,并将这些字节、字符和字段写至标准输出,如不制定File的参数,cut命令将会读取标准输入,所以必须要指定-b、-c或-f作为其标志

##参数说明
	
	-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
	 
	-c :以字符为单位进行分割。
	
	-d :自定义分隔符,默认为制表符。
	
	-f :与-d一起使用,指定显示哪个区域。

	-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除

指定打印列(与awk进行比较)
Shell编程之正则表达式_第9张图片
Shell编程之正则表达式_第10张图片
Shell编程之正则表达式_第11张图片
注意(-b与-c 的区别)
在这里插入图片描述
组合监控IP端口的使用情况
在这里插入图片描述
在这里插入图片描述


总结

可以通过正则表达式来对普通字符和元字符来进行表示,需要知道基础正则表达式和扩展正则表达式的使用,这很重要!!!
认识一下简单地文本处理小工具:排序sort、uniq去重、tr修改和cut列举

你可能感兴趣的:(Shell,linux)