簡體   English   中英

使用 awk 提取所有 email

[英]Extract all email in line using 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}/,"", $0)}}'

但是它不能正常工作。 我期待以下 output:

test@test.com 
secondtest@test.com

在此處使用 OP 的正則表達式並嘗試在此處修復 OP 的嘗試。 我們需要在代碼中使用[[:space:]]代替\s也不需要在這里使用sub ,簡單地我們可以使用 for 循環逐一遍歷所有字段 go 並打印匹配的字段(通過使用if條件使用哪個正則表達式,只要條件滿足並且正則表達式匹配為 TRUE,則打印該字段,否則什么也不做)。 使用 GNU awk編寫和測試。

echo " test@test.com secondtest@test.com" | 
awk '
{
  for(i=1;i<=NF;i++){
     if($i~/[^[:space:]]+@[^[:space:]]+\.[[:alpha:]]{2,4}/){  print $i  }
  }
}'

使用gnu-awk您可以將自定義RS設置為一個或多個空格,並使用這個更簡單awk將每個空格分隔的字符串拆分為單獨的記錄:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM