【问题标题】:How to blank out returned variable values in text file using PowerShell?如何使用 PowerShell 清除文本文件中返回的变量值?
【发布时间】:2020-01-07 22:58:35
【问题描述】:

我有想要使用 PowerShell 脚本清除的值的文本文件。

例如有以下变量及其对应的值:

Customer FirstName = CHRISTINE
Customer LastName = TOWN
CRN = 211021815L

我希望脚本遍历文件的内容并替换返回的值,使它们如下所示:

Customer FirstName = ******
Customer LastName = ******
CRN = ******

理想情况下,每个返回值的星号数量都是相同的,因此无法从中得出任何信息。如,如果 Customer FirstName 返回值为 8 个字符,则星号数不应匹配 8 个字符。它应该是任意的。

请注意,我已经看到一个类似的现有问题,但该人询问如何将变量值插入占位符而不是替换已经返回的值。由于我的文本文件中的返回值不断变化,因此需要不同的解决方案。

我对 PowerShell 很陌生,但在下面想出了一些非常基本的东西:

(Get-Content C:\Temp\Logs\logfile.log).replace('CRN = <REGEXPRESSIONHERE>', '*****') | Set-Content C:\Temp\Logs\logfile.log

有没有更好的方法在单行中容纳更多变量,而不是用一行来替换每个需要空白的变量的返回值?

【问题讨论】:

  • 不要忘记用您已经尝试过的方法以及它如何不起作用来更新您的问题。
  • 这些行是否总是格式化为&lt;variable&gt;&lt;whitespace&gt;=&lt;whitespace&gt;&lt;value&gt;?如果是这样,更通用的正则表达式应该适合您。比如"(\S+)\s*=\s*.+"替换成"$1 = *****",或者类似的东西。仔细看一下,您需要更改的不仅仅是正则表达式...
  • 你好 Glenn,是的,它们总是这样格式化的。我会试试你的建议。谢谢。
  • @ChristianTownsend 我上面的评论中的正则表达式存在问题,因此请忽略这一点。我在下面添加了一个建议作为答案。

标签: regex powershell


【解决方案1】:

这是一个可能的解决方案:

( Get-Content .\logfile.log | ForEach-Object { $_ -replace "(.+) = .+", "`$1 = ****" } ) | Set-Content .\logfile.log

我相信您必须先允许Get-ContentForEach-Object 完成,然后再写回同一个文件。这就是多出一组括号的原因。

【讨论】:

  • 这几乎是完美的。如何在脚本中指定只为特定变量而不是所有变量加星号?
  • ( 获取内容 C:\Temp\Logs\iforlog-with_PII.log | ForEach-Object { $_ -replace "(CRN|FirstName|LastName) = .+", "`$1 =测试"}) |设置内容 C:\Temp\Logs\iforlog-with_PII.log
猜你喜欢
  • 2014-07-14
  • 2022-07-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
  • 2021-10-05
相关资源
最近更新 更多