抽出する必要があるメールアドレスのリストがたくさんありますが、正しい方法が見つかりません。
データも同様に構成されています。
Patabee meeta needo [email protected] pizz bees
Needo [email protected] hama lines question
unix search exchange [email protected] extracts
私のデータで一貫しているのは、Eメールドメインです。
現在私は...
grep -oniT @outlook.com /path/to/file/of/emails/and/such.txt
良い出力を返します..
3624 :@outlook.com
3625 :@outlook.com
3626 :@outlook.com
3630 :@outlook.com
3631 :@outlook.com
3632 :@outlook.com
3633 :@outlook.com
3634 :@outlook.com
3635 :@outlook.com
ただし、ドメイン(現在検索しているドメイン)だけでなく、完全な電子メールアドレスを選択するにはこの情報が必要です。
grepに行全体ではなく一致する文字列を検索するフィールド全体を選択させるにはどうすればよいですか?
答え1
以下は、以下を使用するソリューションです。grep:
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" /path/to/file/of/emails/and/such.txt
ファイルのすべてのメールアドレスを取得します。特定のドメインとのみ一致するように正規表現を調整する必要があります。
-E, --extended-regexp は PATTERN を拡張正規表現として解釈します。
-o、--only-matching一致する行のうち、一致する(空でない)部分のみを印刷します。各部分は別々の出力行に表示されます。
答え2
-o
パターンと一致する部分だけが印刷されるため、を含むようにパターンを拡張する必要があります@
。例のアドレスを使用すると、空白以外の部分をキャプチャできます。
$ grep -oniTE '[^[:blank:]][email protected]' foo
1: [email protected]
2: [email protected]
3: [email protected]
しかし、通常、Eメールアドレスは硬い構文解析のために(引用スペースを含めることができます)、上記のコードはいくつかの有効な電子メールアドレスを失います(一部の無効なアドレスも含めて)。たとえば、参照してください。ウィキペディアそして残酷な詳細に関する標準。