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

正则表达式

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

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:当前文件名
posted on   要快乐不要emo  阅读(21)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示