電子メールのテキストファイルを検索し、特定のドメインから送信された電子メールのリストを取得しようとしています。
私は走っています:
grep -oh "\w*domain.com\w*" file.txt
これは行を見つけましたが、対応する「単語」のみを印刷します。つまり、このリストからコマンドを実行すると、次のようになります。
foo [email protected] bar
baz [email protected] abc
xyz [email protected] defg
klmn [email protected] ijk
yes [email protected] no
それは戻ってくる
domain.com
adomain.com
domain.com
「domain.com」を含む完全なメールアドレスを返したいです。
[email protected]
[email protected]
[email protected]
可能ですかgrep
?ピリオドや@
記号を単語セパレータとして扱わないように指示する必要があります。
編集:同じ行に表示したくない無関係なデータがたくさんあります。
答え1
あなたが探している
grep -ho '\S*domain.com\S*' file
ここでは\S
空白以外の文字と一致するため、この場合、空白の間に文字列grep
"domain.com"を持つすべての項目が一致します。
または明示的に文字列のみを許可する場合@
(明らかに英数字を除く):.
grep -ho '[[:alnum:].@]*domain.com[[:alnum:].]' file
このようにしてgrep
文字列から抽出されます。[email protected]
[[email protected]]
答え2
POSIX的に:
<file tr -cs '[[:alnum:].@-_]' '[\n*]' | grep domain\.com
[email protected]
[email protected]
[email protected]