sed/awk/grep/etc を使用してメールアドレス joebl**@******.*** をブロックする方法 [重複]

sed/awk/grep/etc を使用してメールアドレス joebl**@******.*** をブロックする方法 [重複]

電子メールがいくつかありますが、@記号の前の最後の2文字を除くすべての文字をマスクし、その後のすべての文字をマスクしたいと思います。

たとえば、

<[email protected]>

希望の出力:

<joebl**@******.***>

これまでを使ってperl次のことを試しました。

perl -pe 's/(<.)(.*)(@.)(.*)(.\..*>)/$1."*" x length($2).$3."*" x length($4).$5/e'

しかし、期待した結果は出ません。

ベストアンサー1

$ perl -pe 's/(.*)(..)(@)(.*)(\.)(.*)(>)/$1."*" x length($2).$3."*" x length($4).$5 ."*" x length($6).$7/e' file
<joebl**@*******.***>

それを使ったことはありませんが、perl正規表現を通して一緒に集めることができます。

できるだけ多くの文字を一致させます。

(.*)

2文字を一致させます。

(..)

テキスト@記号

(@)

言葉.

(\.)

次に、対応するマッチを別のものに置き換えます。最初のグループ(最初の5文字)を維持したいので、印刷するだけです。

$1

*そして、2番目のグループで見つかった文字ごとに1つずつ印刷します。

"*" x length($2)

残りはこのように推論できる。

おすすめ記事