我希望有人能帮助我(完成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*
解释:
- 任意数量的单词字符
- 那么至少一个数字
- 任意数量的单词字符
- @
- 它后面的所有东西直到下一个空间