
1 行につき 1 つの電子メール アドレスが記載されたテキスト ファイルがあります。各行のドメイン部分を削除し、TLD 部分を削除しないようにするにはどうすればよいでしょうか。ここでは、TLD を最後のドット文字の後の文字列の最後の要素として定義します。
つまり、サンプル入力は次のようになります。
[email protected]
[email protected]
[email protected]
[email protected]
望ましい出力:
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk
答え1
$ sed 's/@.*[.]/@/' file
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk
正規表現は、から行の最後のピリオドまでの@.*[.]
すべてをキャプチャします。 これを に置き換えます。@
.
@
答え2
使用perl
perl -pe 's/(@).*\.(.*)$/\1\2/' foo
またはインライン
perl -i -pe 's/(@).*\.(.*)$/\1\2/' foo
例
$ cat foo
[email protected]
[email protected]
[email protected]
[email protected]
$ perl -pe 's/(@).*\.(.*)$/\1\2/' foo
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk
正規表現の説明
/(@).*\.(.*)$/
第1捕獲グループ(
@
)@
文字@
に文字通り一致する.*
任意の文字に一致します(改行を除く)量指定子:
*
0 回から無制限の間、できるだけ何回でも、必要に応じて返す [貪欲]\.
文字.
に文字通り一致する第2捕獲グループ(
.*
).*
任意の文字に一致します(改行を除く)量指定子:
*
0 回から無制限の間、できるだけ何回でも、必要に応じて返す [貪欲]$
文字列の末尾の位置をアサートする
答え3
こうすればawk
できる
$awk '{ sub(/\@.*\./,"@"); print }' file
foobar@org
john.smith@com
chunkylover69@dk
qwerty@uk
「置換(検索と置換)」を使用するとsub
、パターンを検索して置換することができます。