在@符号之前从电子邮件地址提取号码



我希望有人能帮助我(完成regex新手(

我试图只提取在@之前带有数字条目的电子邮件地址

例如

James@hotmail.com不会被选择

J4m35@hotmail.com将被选择

我遇到的另一个问题是,每个电子邮件地址之后都有一个十位数的电话号码。

示例

James@hotmail.com55555 11111

J4m35@hotmail.com55555 11112

我所尝试的一切似乎要么也选择了电话号码,要么什么都没有。

提前感谢,如果没有足够的信息,请道歉。我会尽力回答人们的任何问题。

到目前为止我尝试过的东西

grep-E[0-9][@]data.csv

grep-E[0-9]数据.csv

grep-E\d+(?=@(data.csv(由于语法错误,此操作未完成(

正如我所说,我在这方面是一个完全的新手,仍然在努力了解正则表达式

您可以使用

grep -Eo '^[^@[:space:]0-9]*[0-9][^@[:space:]]*@[^[:space:]]+' file

详细信息

  • ^-字符串的开头
  • [^@[:space:]0-9]*-除@、空白和数字之外的零个或多个字符
  • [0-9]-一位数字
  • [^@[:space:]]*-除@、空白和数字之外的零个或多个字符
  • @-一个@字符
  • [^[:space:]]+-除空白字符之外的一个或多个字符

查看在线演示:

s='James@hotmail.com 5555511111
J4m35@hotmail.com 5555511112
J4ll@hotmail.com 6453453344'
grep -Eo '^[^@[:space:]0-9]*[0-9][^@[:space:]]*@[^[:space:]]+' <<< "$s"
# => J4m35@hotmail.com
#    J4ll@hotmail.com

尝试以下操作:\w*\d+\w*[@]\S*

解释:

  • 任意数量的单词字符
  • 那么至少一个数字
  • 任意数量的单词字符
  • @
  • 它后面的所有东西直到下一个空间

最新更新