我想基于一组变量的用户名过滤最后一个实用程序的输出。
这是上次未过滤的样本输出
reboot system boot server Wed Apr 6 13:15 - 14:24 (01:09)
user1 pts/0 server Wed Apr 6 13:08 - 13:15 (00:06)
reboot system boot system Wed Apr 6 13:08 - 13:15 (00:06)
user1 pts/0 server Wed Apr 6 13:06 - down (00:01)
reboot system boot system Wed Apr 6 13:06 - 13:07 (00:01)
user1 pts/0 server Wed Apr 6 12:59 - down (00:06)
我想做的是将last的输出传递给sed。然后,使用sed我将打印每个指定用户名的第一次出现,即他们在wtmp中的最后一个日志条目。输出应如此显示,
reboot system boot server Wed Apr 6 13:15 - 14:24 (01:09)
user1 pts/0 server Wed Apr 6 13:08 - 13:15 (00:06)
我特别喜欢的sed表达式,
last|sed '/user1/{p;q;}'
不幸的是,这只能让我匹配第一次出现的一个用户名。使用这种语法有一种方法可以指定多个用户名吗?提前谢谢!
答案 0 :(得分:2)
awk
比sed
更适合这里:
last | awk '!seen[$1]++'
reboot system boot server Wed Apr 6 13:15 - 14:24 (01:09)
user1 pts/0 server Wed Apr 6 13:08 - 13:15 (00:06)