首页 > 其他分享 >正则表达式与文本处理三剑客

正则表达式与文本处理三剑客

时间:2023-12-06 10:48:44浏览次数:34  
标签:语句 字符 匹配 文件 正则表达式 模式 文本处理 statements 三剑客

正则表达式

使用方法通常为 字符+次数+位置锚定

1、字符匹配

.			匹配任意单个字符,可以是一个汉字
[]			匹配指定范围内的任意单个字符,示例:[wang]
[^]			匹配指定范围外的任意单个字符,示例:[^wang]
[0-9]
[a-z]
[a-zA-Z]
[:alnum:] 	字母和数字
[:alpha:] 	代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 	小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 	大写字母
[:blank:] 	空白字符(空格和制表符)
[:space:] 	包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:] 	不可打印的控制字符(退格、删除、警铃...)
[:digit:] 	十进制数字
[:xdigit:]	十六进制数字
[:graph:] 	可打印的非空白字符
[:print:] 	可打印字符
[:punct:] 	标点符号
\w			#匹配单词构成部分,等价于[_[:alnum:]]
\W			#匹配非单词构成部分,等价于[^_[:alnum:]]
\S			#匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\s			#匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意
Unicode 	正则表达式会匹配全角空格符

2、次数匹配

*			#匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.*			#任意长度的任意字符
\?			#匹配其前面的字符出现0次或1次,即:可有可无
\+			#匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\}		#匹配前面的字符n次
\{m,n\} 	#匹配前面的字符至少m次,至多n次
\{,n\}		#匹配前面的字符至多n次,<=n
\{n,\}		#匹配前面的字符至少n次

3、位置锚定

^		#行首锚定, 用于模式的最左侧
$		#行尾锚定,用于模式的最右侧
^PATTERN$		#用于模式匹配整行
^$#空行
^[[:space:]]*$ #空白行
\< 或 \b		#词首锚定,用于单词模式的左侧
\> 或 \b		#词尾锚定,用于单词模式的右侧
\<PATTERN\>	#匹配整个单词

4、 分组和引用

\(string1\(string2\)\)
\1 :string1\(string2\)
\2 :string2

文本处理三剑客

1、grep

常见选项
-color=auto 	对匹配到的文本着色显示
-m#				匹配#次后停止
-v				显示不被pattern匹配到的行,即取反
-i				忽略字符大小写
-n				显示匹配的行号
-c				统计匹配的行数
-o				仅显示匹配到的字符串
-q				静默模式,不输出任何信息
-A 				#after, 后#行
-B 				#before, 前#行
-C 				#context, 前后各#行
-e				实现多个选项间的逻辑or关系,如:grep –e ‘cat '
-w				匹配整个单词
-E				使用ERE,相当于egrep
-F				不支持正则表达式,相当于fgrep
-f 				file 根据模式文件处理
-r				递归目录,但不处理软链接
-R				递归目录,但处理软链接

2、sed

sed的工作原理是读取一行加载到缓存空间(称之为模式空间)处理完继续下一行,这个处理模式决定了sed的高效率因为是一行一行加载的,而vi这种编辑是要全部加载

主要针对一行一行的数据进行处理

格式
sed 选项 '地址'命令  文件或内容

选项
	-n			不输出模式空间内容到屏幕,即不自动打印
	-e 			多点编辑
    -f	FILE	从指定文件中读取编辑脚本
    -r, -E		使用扩展正则表达式
    -i.bak		备份文件并原处编辑
    -s			将多个文件视为独立文件,而不是单个连续的长文件流
    #说明:
    -i -r 支持
    -ri支持
    -ni会清空文件

地址格式:
	1. 不给地址:对全文进行处理
	2. 单地址:
		#:指定的行,$:最后一行
		/pattern/:被此处模式所能够匹配到的每一行
	3. 地址范围:
		#,#		#从#行到第#行,3,6 从第3行到第6行
		#,+#	#从#行到+#行,3,+4 表示从3行到第7行
		/pat1/,/pat2/  两个正则之间
		#,/pat/			数字与正则
		/pat/,#
	4. 步进:~
		1~2 奇数行 1为起始行后面为步进数
		2~2 偶数行
命令:
	p打印当前模式空间内容,追加到默认输出之后
	Ip忽略大小写输出
	d删除模式空间匹配的行,并立即启用下一轮循环
	a [\]text在指定行后面追加文本,支持使用\n实现多行追加
	i [\]text在行前面插入文本
	c [\]text替换行为单行或多行文本
	w file保存模式匹配的行至指定文件
	r file读取指定文件的文本至模式空间中匹配到的行后
	=为模式空间中的行打印行号
	!模式空间中匹配行取反处理
	q结束或退出sed
查找替代:
    s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###替换修饰符:
    g	行内全局替换
    p	显示替换成功的行
    w	/PATH/FILE  将替换成功的行保存至文件中
    I,i	忽略大小写

3、awk

3.1 功能

文本处理
输出格式化的文本报表
执行算数运算
执行字符串操作

3.2 工作原理

awk 工作过程
第一步 执行beging语句块 比如变量赋值等
第二步 将文件先读取一行匹配正则语句块依次重复
第三部 执行end语句块

3.3 使用

格式
    awk 选项 'program' var=value
    awk 选项 -f programfile file… var=value file…
选项
    -F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符
    -v var=value 变量赋值
program
    BEGIN语句块
    模式匹配的通用语句块
    END语句块
    格式
    	pattern{action statements;..}
    		pattern:决定动作语句何时触发及触发事件,比如:BEGIN,END,正则表达式等
			action statements:对数据进行处理,放在{}内指明,常见:print, printf
控制语句
    { statements;… } 组合语句
    if(condition) {statements;…} 
    if(condition) {statements;…} else {statements;…}
    while(conditon) {statments;…}
    do {statements;…} while(condition)
    for(expr1;expr2;expr3) {statements;…}
    break
    continue
    exit
print
	printf “FORMAT1,FORMAT2...”, item1, item2, ...
	逗号分隔符
    输出item可以字符串,也可是数值;当前记录的字段、变量或awk的表达式
    如省略item,相当于print $0
    固定字符符需要用“ ” 引起来,而变量和数字不需要
    FORMAT与item一一对应
    	%s:显示字符串
        %d, %i:显示十进制整数
        %f:显示为浮点数
        %e, %E:显示科学计数法数值
        %c:显示字符的ASCII码
        %g, %G:以科学计数法或浮点形式显示数值
        %u:无符号整数
        %%:显示%自身
    修饰符
    - %-10s 左对齐10个字符,默认右对齐

3.4 awk变量

变量以-v 指定,多个变量用多个-v

OFS:输出字段分隔符,默认为空白字符
RS:自定义输入文件换行符
NF:总列数 $NF最后一列
NR:每一行的行号
FILENAME:当前文件名

标签:语句,字符,匹配,文件,正则表达式,模式,文本处理,statements,三剑客
From: https://www.cnblogs.com/guquanheng/p/17878976.html

相关文章

  • 动手写一个正则表达式引擎
    曾经有人开玩笑:当碰到棘手问题的时候,可以考虑使用正则表达式当考虑正则表达式的时候,又多了一个棘手的问题日常工作中,正则表达式是一个非常强大的工具,编写编译器/解释器的时候,正则表达式是必须的工具。自己动手写一个正则表达式,有利于使用者以正则表达式的方式思考,也是一个非常好......
  • 三剑客awk
    grep,擅长单纯的查找或匹配文本内容sed,更适合编辑、处理匹配到的文本内容awk,更适合格式化文本内容,对文本进行复杂处理后、更友好的显示一.awk的语法格式awk指令是由模式,动作,或者模式和动作的组合组成.模式即pattern,可以类似理解成sed的模式匹配,可以由表达式组成,也可以使两......
  • Java登陆第十七天——正则表达式
    在java.util.regex包下,提供了正则表达式对字符串进行约束规范匹配正则表达式必须依靠Pattern类和Matcher类。PatternPattern类的主要作用是编写正则规范。常用方法如下:方法类型描述publicstaticPatterncompile(Stringregex)静态方法传入正则表达式规则,并返回......
  • python 正则表达式总结
    python正则表达式总结#findall找出所有的,match从第一个字符开始找,fullmatch全句完全匹配,search从任意位置开始找text="jack最好,jack最好的,jack最好了,jack是最好的"pattern="jack最好"print(re.findall(pattern,text))输出:['jack最好',......
  • 【Linux 基础】正则表达式 与 通配符 区别
    简短不看版:通配符和正则表达式比较(1)通配符和正则表达式看起来有点像,不能混淆。可以简单的理解为通配符只有*,?,[],{}这4种,而正则表达式复杂多了。(2)*在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者多个......
  • 三剑客sed
    一.sed语法sed[选项][sed内置命令字符][输入文件]说明:1.注意sed软件及后面选项,sed命令和输入文件,每个元素之间都至少有一个空格2.为了避免混淆,文本称呼sed为sed软件.sed-commands(sed命令)是sed软件内置的一些命令选项,为了和前面的options(选项)区分,故称为sed命令......
  • 常用的正则表达式
    validator:function(rule,value,callback){if(/^1[3456789]\d{9}$/.test(value)===false){callback(newError('手机号格式错误'))}else{callback()}},v......
  • 正则表达式手册
    正则表达式教程:https://www.runoob.com/regexp/regexp-tutorial.html正则表达式在线验证:http://c.runoob.com/front-end/8541、同时包含大写字母、小写字母和数字;密码长度为6-32个字符;^(?=.*[0-9].*)(?=.*[A-Z])(?=.*[a-z])[A-Za-z\d]{8,32}$2、同时包含大写字母、小写字母......
  • Python正则表达式(小结)
    1.什么是正则表达式?正则表达式(regularexpression,有时简写为RegEx或regex)就是用一组由字母和符号组成的“表达式”来描述一个特征,然后去验证另一个“字符串”是否符合/匹配这个特征。2.应用场景?(1)验证字符串是否符合指定特征,比如验证邮件地址是否符合特定要求等;(2)用来查找字......
  • 【Java基础】正则表达式
    正则表达式一般面向搜索引擎编写正则表达式举例StringqqRegex="[1-9]\\d{4,11}";System.out.println("02333133".matches(qqRegex));StringtelRegex="[1][3-9]\\d{9}";System.out.println("13111111a31".matches(telRegex));String......