Linux 命令行上的文字处理


总是有些用户, 明明是自己手抖点错了, 却偏偏要怪服务器出问题. 如果让我选择相信一个人还是一台机器, 那… 还是选机器比较放心. 当然也不能冤枉好人, 于是如何从若干 GB 的服务器日志里找到线索就成为解决问题的关键了.

首先是 grep. grep 就好像是个过滤器, 将无关的内容滤掉, 却从不漏下真相. 假设服务器日志是 server.log, 其中包含时间, 地点, 人物:

1, 找出所有含 beijing 的记录

grep beijing server.log

2, 包含 2013-12-01 当天, 在 beijing 关于 user 的记录

grep  -E -e ‘2013-12-01.*beijing.*user’ server.log

3, 也可以将 grep 串联起来, 逐步缩小包围圈, 这样如果个别记录不符合时间, 地点, 人物的顺序, 也不会被漏掉. 当然我觉得日志还是规矩一点的好.

grep ‘2013-12-01’ server.log |grep beijing |grep user

另外作为开发人员, 使用 grep 来分析代码也很不错的. 找到目标之后, 很可能需要生成一个报表, 最简单的就是 cut 命令了. 假设日志格式是”date time location user action”, 如果我们只需要”date time user action”, 那么

grep beijing server.log| cut -d ‘ ‘ -f1,2,4,5

其中 -d ‘ ‘ 指定使用空格 ‘ ‘ 来做分隔符, -f1,2,4,5 就分别代表需要输出的字段, 因为 location 是第三个, 因此 3 没有出现. 比 cut 强大的多的就是 awk 了, 生成一个有小计/总计什么的表格完全是小菜. 不过这个不是我的兴趣, 所以就点到为止.

🙂

, ,

2 responses to “Linux 命令行上的文字处理”