You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用sed或grep从user.txt日志中提取@符号前的有效用户名

问题原因分析

你那条删除@及后续字符的sed命令不生效的原因如下:

  • 第一,绝大多数sed实现(包括常用的GNU sed)不支持\D这个代表「非数字」的简写元字符,你写的\D会被识别为普通大写字母D,自然匹配不到@spookysec.local这类内容,因此替换完全没有生效。
  • 第二,即使你修正了匹配规则,这条命令也只能删除@及之后的域名后缀,行首的时间戳、> [+] VALID USERNAME:这些前缀内容依然会保留,无法直接得到纯净的用户名。
    另外你之前用两次固定长度截取的方案鲁棒性很差,只要后续日志里的前缀空格、域名长度发生变化,结果就会出错。

最优实现方案

sed 单命令一步实现(无需中间文件)

直接使用捕获组提取用户名,命令如下:

sed -r 's/.*VALID USERNAME: +([^@]+)@.*/\1/' user.txt

规则说明:

  • .*VALID USERNAME: + 匹配从行首到「VALID USERNAME:」加后面任意多个空格的所有前缀内容
  • ([^@]+) 捕获@符号之前的所有连续字符,也就是你要的用户名
  • @.* 匹配@符号之后到行尾的所有后缀内容
  • 最后将整行替换为第一个捕获组\1,直接输出纯净用户名

grep 实现方案

如果习惯用grep,可以用Perl兼容正则+正向断言实现:

grep -oP '(?<=VALID USERNAME:   )[^@]+' user.txt

规则说明:

  • -P 开启Perl兼容正则支持,-o 只输出匹配到的内容
  • (?<=VALID USERNAME: ) 是正向零宽断言,定位到「VALID USERNAME: 」之后的位置
  • [^@]+ 匹配从定位位置到@符号之前的所有内容,就是目标用户名

内容的提问来源于stack exchange,提问作者ehehehehehehe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:15:04