将所有社会安全号码 (SSN) 数字替换为 X

将所有社会安全号码 (SSN) 数字替换为 X

我想要一个 sed 命令来更改所有社会保障 # 序列中的所有数字(格式仅如下所示123-45-6789或这个123456789) 到 X 的。任何格式与提供的 2 个示例之一不完全相同的数字序列不应受到该sed命令的影响。数字序列都在一个信息.txt文件。

信息.txt看起来大致是这样的:

id093: 888-88-8888
id094: 333-33-3333
id095: 123456789
id096: 987654321
This next number shouldn't be converted to X's 0123456789 nor this one 0987-65-4321

从查看此页面(http://www.computerhope.com/unix/used.htm)在“s 命令”下,我知道这是我需要使用的格式:

sed –i 's/regularexpression(s)/replacement/g' info.txt

我不确定如何格式化regular expression(s)replacement部分,因此只有符合前面提到的两种格式的数字才会受到影响(同时保留连字符)。

答案1

由于您似乎已经在使用 GNU sed-i扩展):

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(GNUsed借用的-i):

perl -pi -e 's{(?<![\d-])(\d{3}-\d\d-\d{4}|\d{9})(?![\d-])}{
  $& =~ s/\d/X/gr}eg' your-file

相关内容