【发布时间】:2020-11-08 17:03:16
【问题描述】:
我需要你的帮助。我有一个 log.txt 文件,其中包含我必须匿名的各种数据。
我想检索与预定义模式匹配的所有这些“字符串”,并将它们替换为每个值的另一个值。重要的是来自相同模式的每个新字符串(并且具有与前一个不同的值)应该被预定义的值替换为+1(例如“orderID = 123ABC”变为“orderID = order1”和“orderID = 456ABC " 变成 "orderID=order2")。
要搜索的模式超过 20 个,因此不可能将它们全部放在一行中。
我的想法是:
- 定义“patterns.txt”文件
- 定义“replace.txt”文件(“pattern”值和替换值)
- 在日志文件中搜索所有“patterns”,结果为ARRAY
- 在该 ARRAY 中查找唯一条目
- 获取 ARRAY 中每个唯一条目的“替换”值
- 替换 log.txt 中的所有匹配项。这里棘手的部分是任何出现的相同类型(但与前一个不同的值)都需要增加 (+1) 才能与之前的不同。
我所拥有的示例:
requestID>qwerty1-qwerty2-qwerty3
requestID>12345a-12345b-12345c
requestID>qwerty1-qwerty2-qwerty3
requestID>qwerty1-qwerty2-qwerty3
orderID>012345ABCDE
orderID>012345ABCDE
orderID>ABCDE012345
orderID>ABCDE012345
keyId>XYZ123
keyId>ABC987
keyId>XYZ123
想要的结果:
requestID>Request-1
requestID>Request-2
requestID>Request-1
requestID>Request-1
orderID>Order-1
orderID>Order-1
orderID>Order-2
orderID>Order-2
keyId>Key-1
keyId>Key-2
keyId>Key-1
目前我只能找到每种类型的唯一值:
$N = "C:\FindAndReplace\input.txt"
$Patterns = "C:\FindAndReplace\pattern.txt"
(Select-String $N -Pattern 'requestID>\w{6}-\w{6}-\w{6}</requestID>').Matches.Value | Sort-Object -Descending -Unique
(Select-String $N -Pattern '<orderID>\w{20}</orderID>').Matches.Value | Sort-Object -Descending -Unique
(Select-String $N -Pattern '<keyId>\w{8}</keyId>').Matches.Value | Sort-Object -Descending -Unique
提前感谢您对如何进行的任何建议。
【问题讨论】:
标签: powershell replace find