xChar

来自于《计算机教育中缺失的一课》04

简单正则

将字符中a或者b抹除(替换为空字符),并输出

echo 'abcaba' | sed -E 's/[ab]//'

输出结果:bcaba

以上,正则只匹配一次,要多次匹配,在后面加g

echo 'abcaba' | sed -E 's/[ab]//g'

输出结果:c

有些指令并并不会生效,比如

echo 'abcaba' | sed 's/(ab)*//g'

输出结果:abcaba

我们需要添加参数E,使其支持更新的语法

echo 'abcaba' | sed -E 's/(ab)*//g'

输出结果:ca

或者通过转义符,告诉程序括号为括号

echo 'abcaba' | sed 's/\(ab\)*//g'

输出结果:ca

匹配后是即时删除的,比如

echo 'abcababc' | sed -E 's/(ab|bc)*//g'

输出结果:cc

[在线正则网站]https://regex101.com/

综合正则

vim 进入api-controller.log后,使用 ":%s + 正则" 的方式可能查找不出来,或许跟行匹配有关

暂时没有找到原因

读取日志

cat api-controller.log

过滤关键字,此时管道中的数据是按行输出,为之后的正则匹配提供了条件

grep '源文件路径'

对过滤出的每一行日志按正则过滤,并按组输出(起始组:1)

sed -E 's/^.*\[([0-9a-z]{32})\]: .*:(esus.*pdf)$/\2/'

其中 "\2" 表示第二组,正则中的小括号表示结果分组

打印组数据

awk '{print $0}'

以数据源为例:

2023-05-24 16:49:03.565 INFO [http-nio-9001-exec-6] [c.b.c.s.w.c.DeleteSourceAspect_after:123] - [a9f3e9082bef43519c5d1917092d61ba]: 源文件路.:esus/web/2023/5/24/f8f79256991e27cbad615e406d9fd499439fbd044adf02cc4b183c9e0f39b23fgdfileflag82b-4433-837d-d14d5451.pdf

查询链路ID:

cat api-controller.log | grep '源文件路径' | sed -E 's/^.*\[([0-9a-z]{32})\]: .*:(esus.*pdf)$/\1/' | awk '{print $1}'

输出为:a9f3e9082bef43519c5d1917092d61ba

查询文件路径:

cat api-controller.log | grep '源文件路径' | sed -E 's/^.*\[([0-9a-z]{32})\]: .*:(esus.*pdf)$/\2/' | awk '{print $1}'

输出为:esus/web/2023/5/24/f8f79256991e27cbad615e406d9fd499439fbd044adf02cc4b183c9e0f39b23fgdfileflag82b-4433-837d-d14d5451.pdf

更多参考:[数据整理] https://missing-semester-cn.github.io/2020/data-wrangling/

Loading comments...