電子メールがいくつかありますが、@記号の前の最後の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)
残りはこのように推論できる。