<分区>
我需要从这样的字符串中提取电子邮件地址(我正在制作一个日志解析器):
<some text> from=someuser@somedomain.com, <some text>
与 egrep
(或 grep -Eo
)。所以只需要在"from="
之间拉出字符串和 ","
,因为日志的其他部分也包含电子邮件地址,例如 to=
和 etc
<分区>
我需要从这样的字符串中提取电子邮件地址(我正在制作一个日志解析器):
<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/