使用grep在两个特定单词/字符之间获取字符串的模式

 叫我GYJ 发布于 2023-02-04 12:32

我需要从像这样的字符串中提取电子邮件地址(我正在创建一个日志解析器): from=someuser@somedomain.com,

egrep(或grep -Eo).所以字符串只需要在"from="和之间拉出",",因为日志的其他部分也包含电子邮件地址,比如to=etc

2 个回答
  • 尝试 awk

    echo '<text> from=someuser@somedomain.com, <text>' | awk -F[=,] '{print $2}'
    

    $2根据其位置,这里可以是不同的数字.

    2023-02-04 12:34 回答
  • 使用grep -oP:

    s='<some text> from=someuser@somedomain.com, <some text>'
    grep -oP '(?<=from=).*?(?=,)' <<< "$s"
    someuser@somedomain.com
    

    或者lookbehind通过使用避免\K:

    grep -oP 'from=\K.*?(?=,)' <<< "$s"
    someuser@somedomain.com
    

    万一你grep不支持-P(PCRE)使用这个sed:

    sed 's/.*from=\(.*\),.*/\1/' <<< "$s"
    someuser@somedomain.com
    

    2023-02-04 12:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有