通过linux进行文件过滤
需求
过滤某文件中,特定行的产品 id,如下所示:
1 | 2023-09-06 17:24:25.440: [26520] request start, url:/collectionsearch start time:1693992265440ms |
上述中,通过关键字“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 |