I need a regex to obfuscate emails in a database dump file I have. I\'d like to replace all domains with a set domain like @fake.com
so I don\'t risk sending ou
You may use the following command for Vim:
:%s/\(\<[A-Za-z0-9._%-]\+@\)[A-Za-z0-9.-]\+\.[A-Za-z]\{2,4}\>/\1fake.com/g
Everything between \(
and \)
will become a group that will be replaced by an escaped number of the group (\1
in this case). I've also modified the regexp to match the small letters and to have Vim-compatible syntax.
Also you may turn off the case sensitivity by putting \c
anywhere in your regexp like this:
:%s/\c\(\<[A-Z0-9._%-]\+@\)[A-Z0-9.-]\+\.[A-Z]\{2,4}\>/\1fake.com/g
Please also note that %
in the beginning of the line asks Vim to do the replacement in a whole file and g
at the end to do multiple replacements in the same line.
One more approach is using the zero-width matching (\@<=
):
:%s/\c\(\<[A-Z0-9._%-]\+@\)\@<=[A-Z0-9.-]\+\.[A-Z]\{2,4}\>/fake.com/g
SublimeText
SublimeText uses Boost syntax, which supports quite a large subset of features in Perl regex. But for this task, you don't need all those advanced constructs.
Below are 2 possible approaches:
If you can assume that @
doesn't appear in any other context (which is quite a fair assumption for normal text), then you can just search for the domain part @[A-Z0-9.-]+\.[A-Z]{2,4}\b
and replace it.
If you use capturing groups (pattern)
and backreference in replacement string.
Find what
\b([A-Z0-9._%-]+)@[A-Z0-9.-]+\.[A-Z]{2,4}\b
([A-Z0-9._%-]+)
is the first (and only) capturing group in the regex.
Replace with
$1@fake.com
$1
refers to the text captured by the first capturing group.
Note that for both methods above, you need to turn off case-sensitivity (indicated as the 2nd button on the lower left corner), unless you specifically want to remove only emails written in ALL CAPS.