1

我正在尝试在文件 (.json) 中屏蔽 PII。

该文件包含不同的电子邮件地址,我想用其他不同的电子邮件地址更改它们。

例如:

"results":

[{ "email1@domain1.com",

"email2@domain2.com",

"email3@domain3.com",

"email4@domain4.com",

"email5@domain5.com" }]

我需要将它们更改为:

"results":

[{ "mockemail1@mockdomain1.com",

"mockemail2@mockdomain2.com",

"mockemail3@mockdomain3.com",

"mockemail4@mockdomain4.com",

"mockemail5@mockdomain5.com" }]

使用 sed 和正则表达式,我已经能够将地址更改为一个模拟电子邮件地址,但我想将每封电子邮件更改为不同的模拟电子邮件。

模拟电子邮件地址存储在文件中。要获得一个随机地址,我使用:

RandomEmail=$(shuf -n 1 Mock_data.csv | cut -d "|" -f 3)

有任何想法吗?谢谢!

4

5 回答 5

2

emailX@domainX.com我用to保存了第一个文件/tmp/1。我创建了一个包含/tmp/2模拟邮件内容的文件:

mockemail1@mockdomain1.com
mockemail2@mockdomain2.com
mockemail3@mockdomain3.com
mockemail4@mockdomain4.com
mockemail5@mockdomain5.com

首先,我从中提取电子邮件地址列表,然后对模拟邮件进行/tmp/1洗牌。然后我加入使用粘贴电子邮件和在列上洗牌的模拟邮件。然后我将行从格式email mockemail转换为 sed 参数s/email/mockemail/;并将其传递给 sed。然后我调用 sed 将电子邮件替换为随机的 mockemail 传递/tmp/1文件作为标准输入。

sed "$(paste <(cat /tmp/1 | sed -n '/@/{s/.*"\(.*@.*.com\)".*/\1/;/^$/d;p;}') <(shuf /tmp/2) | sed 's#\(.*\)\t\(.*\)#s/\1/\2/#' | tr '\n' ';')" </tmp/1

这会产生:

"results":

[{ "mockemail1@mockdomain1.com",

"mockemail3@mockdomain3.com",

"mockemail5@mockdomain5.com",

"mockemail4@mockdomain4.com",

"mockemail2@mockdomain2.com" }]
于 2018-06-04T09:08:56.350 回答
2

input.json 你已经得到了你的 JSON 文件(在末尾添加一个额外的断线,在这个例子中没有出现,或者 bash 中的读取函数将无法正常工作)

"results":

[{ "email1@mockdomain1.com",

"email2@mockdomain2.com",

"email3@mockdomain3.com",

"email4@mockdomain4.com",

"email5@mockdomain5.com" }]

替换 .txt (在此示例中未出现的末尾添加额外的断线或 bash 中的读取功能将无法正常工作)

domain1.com;mockdomain1.com
domain2.com;mockdomain2.com
domain3.com;mockdomain3.com
domain4.com;mockdomain4.com
domain5.com;mockdomain5.com

脚本.sh

  #!/bin/bash
  while read _line; do
  unset _ResultLine

  while read _subs; do
    _strSearch=$(echo $_subs | cut -d";" -f1)
    _strReplace=$(echo $_subs | cut -d";" -f2)

    if [ "$(echo "$_line" | grep "@$_strSearch")" ]; then
      echo "$_line" | awk -F"\t" -v strSearch=$_strSearch -v strReplace=$_strReplace \
      '{sub(strSearch,strReplace); print $1}' >> output.json
      _ResultLine="ok"
    fi
  done < substitutions.txt

  [ "$_ResultLine" != "ok" ] && echo "$_line" >> output.json
done < input.json

输出.json

"results":

[{ "email1@mockdomain1.com",

"email2@mockdomain2.com",

"email3@mockdomain3.com",

"email4@mockdomain4.com",

"email5@mockdomain5.com" }]
于 2018-06-04T09:38:27.447 回答
1

给定这些输入文件:

$ cat file1
"results":

[{ "email1@domain1.com",

"email2@domain2.com",

"email3@domain3.com",

"email4@domain4.com",

"email5@domain5.com" }]

$ cat file2
foo|bar|mockemail1@mockdomain1.com|etc
foo|bar|mockemail2@mockdomain2.com|etc
foo|bar|mockemail3@mockdomain3.com|etc
foo|bar|mockemail4@mockdomain4.com|etc
foo|bar|mockemail5@mockdomain5.com|etc

所有你需要的是:

$ shuf file2 | awk 'NR==FNR{a[NR]=$3;next} /@/{$2=a[++c]} 1' FS='|' - FS='"' OFS='"' file1
"results":

[{ "mockemail2@mockdomain2.com",

"mockemail4@mockdomain4.com",

"mockemail5@mockdomain5.com",

"mockemail1@mockdomain1.com",

"mockemail3@mockdomain3.com" }]
于 2018-06-04T17:46:43.533 回答
0

快速而肮脏的实施python

假设:

您有一个格式正确的 JSON 输入:

{
    "results":
    [
        "email1@domain1.com",
        "email2@domain2.com",
        "email3@domain3.com",
        "email4@domain4.com",
        "email5@domain5.com"
    ]
}

您可以在此地址https://jsonformatter.curiousconcept.com/验证您的 JSON

代码:

import json
import sys


input_message = sys.stdin.read()
json_dict = json.loads(input_message)
results=[]
for elem in json_dict['results']:
        results.append("mock"+elem)
results_dict = {}
results_dict['results']=results
print(json.dumps(results_dict))

命令:

$ echo '{"results":["email1@domain1.com","email2@domain2.com","email3@domain3.com","email4@domain4.com","email5@domain5.com"]}' | python jsonConvertor.py 
{"results": ["mockemail1@domain1.com", "mockemail2@domain2.com", "mockemail3@domain3.com", "mockemail4@domain4.com", "mockemail5@domain5.com"]}
于 2018-06-04T09:10:58.143 回答
0

我的一个朋友建议了以下优雅的解决方案,它分为两部分:

  1. 用字符串替换电子邮件地址。

    sed -E -i 's/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b/EMAIL_TO_REPLACE/g' data.json
    
  2. 迭代文件,并在每次迭代中用文件中的随机电子邮件替换字符串的第一次出现:

    for email in $(egrep -o EMAIL_TO_REPLACE data.json) ; do 
        sed -i '0,/EMAIL_TO_REPLACE/s//'"$(shuf -n 1 Mock_data.csv | cut -d "|" -f 3)"'/' data.json ; 
    done
    

就是这样。

谢谢艾琳娜!

于 2018-06-04T10:11:09.097 回答