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

标签 regex bash grep

<分区>

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

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

最佳答案

使用 grep -oP:

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

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

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

如果您的 grep 不支持 -P (PCRE),请使用此 sed:

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

关于regex - 使用grep获取两个特定单词/字符之间的字符串的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077882/

相关文章:

bash - 出错退出子shell

Linux:阻塞直到在文件 ("tail + grep with blocking"中匹配到字符串)

regex - sed:我的模式可以包含 "is not"字符吗?我怎么说 "is not X"?

regex - 如何在 awk 中生成错误消息列表?

java - 如何在 Java 中为 OS X 运行 sudo 命令

reactjs - 当我在 Ubuntu 中输入任何东西时,它会返回/usr/bin/env : ‘bash\r’ : No such file or directory

linux - grep 两个文件之间

bash - 带有 pgrep 的 Ansible shell 任务不断失败,在普通 shell 中工作

java - 如何处理包含正斜杠 (/) 的请求?

regex - 匹配一个文件夹中的字符串并使用查询字符串 htaccess 的部分重定向到其他文件夹