[英]Using awk to find a line (with regex) then extract word between parantheses
[英]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.