Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用awk提取行中的所有电子邮件_Regex_Awk - Fatal编程技术网

Regex 使用awk提取行中的所有电子邮件

Regex 使用awk提取行中的所有电子邮件,regex,awk,Regex,Awk,我正试图用awk提取该行的所有电子邮件。这就是我所尝试的: echo " test@test.com secondtest@test.com" | awk 'BEGIN{IGNORECASE = 1}{while(match($0,/[^\s@]+@[^\s@]+\.[a-z]{2,4}/, result) !=0 ) { printf "%s\\n",result[0]; $0 = sub(/[^\s@]+@[^\s@]+\.[a-z]{2,4}/,&q

我正试图用awk提取该行的所有电子邮件。这就是我所尝试的:

echo " test@test.com secondtest@test.com" | awk 'BEGIN{IGNORECASE = 1}{while(match($0,/[^\s@]+@[^\s@]+\.[a-z]{2,4}/, result) !=0 ) { printf "%s\\n",result[0]; $0 = sub(/[^\s@]+@[^\s@]+\.[a-z]{2,4}/,"", $0)}}'
但是它不能正常工作。我期望得到以下结果:

test@test.com 
secondtest@test.com

在这里使用OP的正则表达式并尝试修复OP的尝试。我们需要在代码中使用[[:space:]代替\s,这里也不需要使用sub,我们可以使用for循环逐个遍历所有字段,并使用使用正则表达式的if条件打印匹配的字段,如果条件满足且正则表达式匹配为TRUE,则只需打印该字段,否则不执行任何操作。使用GNU awk编写和测试


在这里使用OP的正则表达式并尝试修复OP的尝试。我们需要在代码中使用[[:space:]代替\s,这里也不需要使用sub,我们可以使用for循环逐个遍历所有字段,并使用使用正则表达式的if条件打印匹配的字段,如果条件满足且正则表达式匹配为TRUE,则只需打印该字段,否则不执行任何操作。使用GNU awk编写和测试

使用gnu awk,您可以将自定义RS集用作一个或多个空格,并使用此更简单的awk将每个空格分隔的字符串拆分为单独的记录:

echo " test@test.com secondtest@test.com" |
awk -v RS='[[:space:]]+' '/^[^@[:blank:]]+@[^[:blank:]]+\.[[:alpha:]]{2,4}$/'
使用gnu awk,您可以将自定义RS集用作一个或多个空格,并使用此更简单的awk将每个空格分隔的字符串拆分为单独的记录:

echo " test@test.com secondtest@test.com" |
awk -v RS='[[:space:]]+' '/^[^@[:blank:]]+@[^[:blank:]]+\.[[:alpha:]]{2,4}$/'

还请注意\s、\d、\w、\w、\s等是PCRE属性,在awk的ERE中不受支持。还请注意\s、\d、\w、\w、\s等是PCRE属性,在awk的ERE中不受支持。请注意\s、\d、\w、\s等是PCRE属性,在ERE的awk regex flavor中不受支持。这不是一个很好的用于匹配电子邮件地址的regexp,但您的示例输入中存在的所有内容都是由空格分隔的有效电子邮件地址,因此您没有提供任何可供我们测试的内容-我们可以使用[^]的regexp+如果我们提供了一些无效的电子邮件地址,那么您当前的regexp将接受它们为有效的,而不会接受其他有效的电子邮件地址,例如TLD超过4个字符的电子邮件地址,如.museum。如果您需要这方面的帮助,请搜索存档,然后在必要时询问新问题请注意\s、\d、\w、\w、\s等是PCRE属性,在ERE的awk regex flavor中不受支持。这不是一个很好的用于匹配电子邮件地址的regexp,但您的示例输入中存在的所有内容都是由空格分隔的有效电子邮件地址,因此您没有提供任何可供我们测试的内容-我们可以使用[^]的regexp+如果我们提供了一些无效的电子邮件地址,那么您当前的regexp将接受它们为有效的,而不会接受其他有效的电子邮件地址,例如TLD超过4个字符的电子邮件地址,如.museum。如果您需要帮助,请搜索档案,然后在必要时提出新问题
test@test.com
secondtest@test.com