我有一个变量:$change
。
我试图从中提取电子邮件(找到“by”和“@”之间的字符串):
change="Change 1234 on 2016/08/31 by name@company.com 'cdex abcd'"
email=$(echo $change|sed -e 's/\by\(.*\)@/\1/')
没用。
最佳答案
在 b
之前有一个转义字符,这使得它成为 \b
。这是一个词边界,所以你不想要这里的东西。
看区别:
$ echo "$change" | sed -e 's/\by\(.*\)@/\1/'
# ^
Change 1234 on 2016/08/31 by name@company.com 'cdex abcd'
$ echo "$change" | sed -e 's/by\(.*\)@/\1/'
# ^
Change 1234 on 2016/08/31 namecompany.com 'cdex abcd'
# ^
# by is not here any more
但是如果你想获取名称,只需使用 .*
来匹配 by
之前的所有内容:
$ echo "$change" | sed -e 's/.*by\(.*\)@/\1/'
namecompany.com 'cdex abcd'
最后,如果您想要的只是 by
(注意尾随空格)和 @
之间的数据,请使用其中任何一个(使用 -r
你不必转义捕获的组):
sed -e 's/.*by \(.*\)@.*/\1/'
sed -r 's/.*by (.*)@.*/\1/'
根据您的输入:
$ sed -e 's/.*by \(.*\)@.*/\1/' <<< "Change 1234 on 2016/08/31 by name@company.com 'cdex abcd'"
name
关于string - 从 bash 中的字符串中提取电子邮件字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39270018/