[英]grep regex match email address
我有一個文件test.txt
,其中包含以下內容:
BC@ABSC.CA
ABCabc+-._@mcmaster.io.ca
ABCabc+-._@school.image
ABCabc+-._@school3-computer.image
ABCabc+-._@school3-IT.image.tor.chrome.ca
ABCabc+-._@school3-IT.image.tor.chrome.canadannn
ABC123abc+-._@school3-IT.imageal.tor.chrome.canadannn
ABCabc+-._@school3-*IT.image.tor.chrome.ca
ABCabc+-._@school3-IT.image.tor.chrome.caskdlfj
ABCab*c+-._@school3-IT.image.tor.chrome.caABCabc
然后我用
grep -E '^[A-Za-z0-9+._-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}' test.txt
嘗試匹配有效的電子郵件。 這里的關鍵是最后一個子域必須是2到6個字符的序列。
因此,我希望獲得以下輸出:
BC@ABSC.CA
ABCabc+-._@mcmaster.io.ca
ABCabc+-._@school.image
ABCabc+-._@school3-computer.image
ABCabc+-._@school3-IT.image.tor.chrome.ca
但是,即使最后一個域的長度達到6個字符,我也可以獲得以下內容。
ABCabc+-._@school3-IT.image.tor.chrome.canadannn
ABC123abc+-._@school3-IT.imageal.tor.chrome.canadannn
ABCabc+-._@school3-IT.image.tor.chrome.caskdlfj
我該如何解決這個問題?
問題是grep
匹配一行中的任何內容。 如果您想要完整的整行,請在末尾添加$
終止符。 讓我們看一個例子:
ABCabc+-._@school3-IT.image.tor.chrome.canadannn
ABCabc+-._
匹配^[A-Za-z0-9+._-]+
@
比賽@
school3-IT.image.tor.chrome.
匹配([a-zA-Z0-9-]+\\.)+
。 據我所知,所有量詞在grep
都是貪婪的。 canada
符合[a-zA-Z]{2,6}
nnn
被忽略 沒有$
,只需要匹配的行的某些部分 ,不一定是整個部分。
在您的正則表達式中添加最終錨: $
:
grep -E '^[A-Za-z0-9+._-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}$' test.txt
有關它的更多信息: http : //www.regular-expressions.info/anchors.html
您可以通過在字符串末尾添加$
來修復查詢。
grep -E '^[A-Za-z0-9+._-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}$' test.txt
這是一個現場演示: https : //regex101.com/r/NtZJQ0/1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.