如何用单行命令匹配邮箱并输出小写邮箱+ +对应整行内容
单行命令实现邮箱提取小写并拼接原行
Perl 方案(修正你提供的代码问题)
你原来的Perl正则存在语法错误,比如字符组里错误使用了{0-9}(正确写法是0-9)、顶级域名长度限定位置错误,替换部分的\1也无对应捕获组。修正后的命令如下:
perl -ne 'if (/([A-Za-z0-9._+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,9})/) { print lc($1), "\t", $_ }'
关键说明:
-ne参数:逐行读取输入,不自动输出内容,方便自定义输出逻辑- 正则捕获组
():精准匹配邮箱格式,把匹配到的邮箱存入变量$1 lc($1):将捕获到的邮箱字符串转为全小写- 最后输出小写邮箱 + 制表符 + 原行完整内容
Awk 方案
如果偏好Awk,也可以用以下命令实现:
awk 'match($0, /[A-Za-z0-9._+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,9}/, m) { print tolower(m[0]) "\t" $0 }'
关键说明:
match()函数:匹配行中的邮箱字符串,结果存入数组m,m[0]为匹配到的完整邮箱tolower(m[0]):将邮箱转为全小写- 输出格式与Perl方案一致
测试示例
输入:
info1 info2 emaiL@Domain.com 09-03-2023
输出:
email@domain.com info1 info2 emaiL@Domain.com 09-03-2023
内容的提问来源于stack exchange,提问作者Random Guy
相关产品推荐
相关产品推荐

