sed 和连续两行

sed 和连续两行

我有一个应用程序的日志文件,我必须仅过滤未成功登录的用户(在用户 ID 之后注册为 ok)

日志文件具有如下条目。

user2
user5
user7
user1
user1
user1 ok
user8
user9
user3
user3 ok

预期输出应如下所示。

user2
user5
user7
user8
user9

我想:

sed "/user/N;/ok/d"

没有结果。我一直收到“用户 1”

user2
user5
user7
user1
user8
user9

答案1

这是有效的,除非我以错误的方式理解你的问题:

$ grep -v -f <(grep " ok$" aa.txt |cut -d' ' -f1) aa.txt
user2
user5
user7
user8
user9

实际上,我们在文件中查找所有标记为“正常”的名称,然后我们使用这些名称作为从同一文件中排除的模式,以获得“不正常”登录。

这是基于以下事实:由于 user1 最终成功登录(即使经过三次尝试),因此 user1 不会被视为失败,因此排除了所有 user1 尝试。
grep -v :排除模式
grep -f :从文件加载模式,这里是保存成功登录的进程替换。

PS1:文件 aa.txt 是我的本地文件之一,我已将您的数据粘贴到其中。

更新:在 ok 之前
使用<(grep " ok$" aa.txt |cut ...)空格,将确保登录失败但名称中包含“ok”的用户名不会被匹配(即用户 Bangok)

相关内容