Linux-正则表达式(二)

本文介绍了如何使用扩展正则表达式进行数据筛选,例如去除空白行和行首为#的行,并展示了相关符号的功能,如+、?、|和()。此外,还讲解了awk命令在格式化输出和处理文件内容中的作用,以及如何通过print和内置变量实现信息定制。同时提到了文件比对工具diff和cmp在检查文件差异中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

扩展正则表达式

为了简化命令操作,扩展正则表达式更方便

#例如去除空白行与行首为#的行:
grep -v '^$' xxx.txt | grep -v '^#'
#使用扩展表达式简化为
egrep -v '^$|^#' xxx.txt
#在单引号内,管道| 的意义为或

扩展正则表达式的一些符号

+:重复一个或一个以上的前一个re字符
egrep -n 'go+d' xx.txt   /一个或一个以上o
?: 零个或一个的前一个re字符
egrep -n 'go?d' xx.txt   /
|: 用或的方式找出数个字符串
egrep -n 'gd|good' xx.txt   /查找gd和good两个字符串
egrep -n 'gd|good|dog' xx.txt
(): 找出群组字符串
egrep -n 'g(la|oo)d' xx.txt /查找glad或good两个字符串
()+: 多个重复群组的判别
echo 'AbcbcbcbcD'|egrep'A(bc)+D'

文件的格式化与相关处理

通过数据流重定向配合print以及awk命令就可以让你的信息以你想要的模式输出。

print ’打印格式‘ 实际内容
\a 警告声音输出
\b 退格键
\f 清除屏幕
\n 输出新的一行
\r 回车按键
\t 水平的tap键
\v 垂直的tap键
\xNN NN为两位数的数字,可以转换数字为字符串

%ns n数字,多少个字符
%ni 多少个整数位
%N.nf N位数,n小数位  /%8.2f:00000.00

awk:好用的数据处理工具

akw '条件类型1{操作1}条件类型2{操作2}...' filename
#akw 主要处理每一行的字段内的数据,而默认的字段的分隔符为空格键或tap键

last -n 5 | awk '{print $1 "\t" $3}'
# 取出账号与登陆者的IP,账号与IP以tap隔开
# 在awk的括号内,每一行的每一个字段都是有变量名称,那就是$1$2等变量名称。

整个处理流程就是:
读入第一行,将第一行数据写入$0$1$2等变量
根据条件类型的限制,判断是否进行后续操作
完成所有操作与条件类型
若还有后续行的数据,则重复1-3

由此可知akw以行为一次处理的单位,以字段为最小处理单位
awk 内置变量

NF:每一行拥有的字段总数
NR:目前akw所处理的是第几行数据
FS:目前的分隔符

last -n 5| awk '{print $1 "\t lines:"NR "\t columns:"NF}'

文件比对工具
同一个软件包不同版本之间,比较配置文件与原始文件差异。

diff   /通常是用在同一个文件或软件的新旧版本差异上
diff [-bBi] from file to file
-b 忽略一行中仅有多个空白的差异,如'ab   c‘与 'abc'
-B 忽略空白行的差异
-i 忽略大小写

cmp [-l] file1 file2
-l 将所有不同点的字节处都列出来,因为cmp默认输出第一个不同点
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值