string - 从 bash 中的字符串中提取电子邮件字符串

标签 string bash

我有一个变量:$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/

相关文章:

linux - 在 csv 列中嵌入逗号的匹配模式

Bash 命令输出不保存到文本文件或变量

linux - 检查文件中的值是否大于或等于 bash 脚本中的值

Python:操纵颜色对象列表?

C 编程根据 4 个字符串对结构数组进行排序

r - R中使用 'stringdist'和 'amatch'进行字符串匹配

bash - bash 中反引号中使用的有效命令?

java - 在java中转义这个字符串 "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b"的最佳方法是什么

string - 使用 > 和 < 比较 Scala 中的两个字符串

bash - 如何在 bash 中运行两个进程,就好像它们是一个进程一样?