Поскольку вы, похоже, используете GNU sed
( -i
extension) уже:
sed -ri ':1
s/(^|[^-0-9])[0-9]{3}-[0-9]{2}-[0-9]{4}([^-0-9]|$)/\1XXX-XX-XXXX\2/g
s/(^|[^-0-9])[0-9]{9}([^-0-9]|$)/\1XXXXXXXXX\2/g
t1' your-file
(на BSD sed
, замените -ri
с -Ei ''
)
Это преобразование ddddddddd
и ddd-dd-dddd
при условии, что они не предшествуют и не следуют десятичная цифра или дефис.
С perl
(из которого GNU sed
заимствовал этот -i
):
perl -pi -e 's{(?<![\d-])(\d{3}-\d\d-\d{4}|\d{9})(?![\d-])}{
$& =~ s/\d/X/gr}eg' your-file