簡體   English   中英

grep regex匹配電子郵件地址

[英]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
  1. ABCabc+-._匹配^[A-Za-z0-9+._-]+
  2. @比賽@
  3. school3-IT.image.tor.chrome. 匹配([a-zA-Z0-9-]+\\.)+ 據我所知,所有量詞在grep都是貪婪的。
  4. canada符合[a-zA-Z]{2,6}
  5. 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.

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