通过linux进行文件过滤

需求

过滤某文件中,特定行的产品 id,如下所示:

1
2
3
4
5
6
7
2023-09-06 17:24:25.440: [26520] request start, url:/collectionsearch start time:1693992265440ms
2023-09-06 17:24:25.431: [26572] html local file handle error [Error: ENOENT: no such file or directory, stat '/mnt/pc-html/simu/p-22229T4Y.html'] {
errno: -2,
code: 'ENOENT',
syscall: 'stat',
path: '/mnt/pc-html/simu/p-22229T4Y.html'
}

上述中,通过关键字“ENOENT: no such file or directory”,筛选出“p-22229T4Y”这个产品 id

实现

less 命令

less 可以对文件进行分页展示,当文件特别大时,特别有用。通过上下箭头进行翻页

grep 命令

根据关键字筛选某一行。其中,-E 参数表示通过正则匹配,-o 参数表示只输出配置的内容

cut 命令

通过 cut 命令来截取字符串,-c 参数表示通过字符分割。如下示例中,表示从 130 字符开始,截取到行尾

rev 命令

对字符串进行反转

uniq 命令

对字符串进行去重

awk 命令

对字符串的前后加上双引号。注意引号需要转义且需要通过双引号包裹

结果

组合上述命令,最终完整命令如下:

1
less /data/pm2/logs/test-pc-out.log | grep -Eo 'ENOENT: no such file or directory.*' | cut -c 130- | rev | cut -c 10- | rev | uniq | awk '{print "\""$0"\","}' | less

结果为

1
p-22229T4Y
发布于

2023-09-06

更新于

2023-10-25

许可协议

评论