替换powershell中包含字符串的单词

替换powershell中包含字符串的单词,powershell,Powershell,我正在尝试清理日志文件,并将包含单词lab的所有主机名替换为sanitized 如果我知道所有可能的主机名,我可以循环替换,但有数百个主机名,但都包含单词labeg: 史蒂夫实验室食品 二号实验室四号 你好,实验狗 我尝试了以下方法: (get-content .\log.txt) -replace '\*lab\*', "sanitized" (get-content .\log.txt) -replace '*lab*', "sanitized" -replace运算符使用regex,

我正在尝试清理日志文件,并将包含单词
lab
的所有主机名替换为
sanitized

如果我知道所有可能的主机名,我可以循环替换,但有数百个主机名,但都包含单词
lab
eg:

  • 史蒂夫实验室食品
  • 二号实验室四号
  • 你好,实验狗
我尝试了以下方法:

(get-content .\log.txt) -replace '\*lab\*', "sanitized"
(get-content .\log.txt) -replace '*lab*', "sanitized"

-replace
运算符使用regex,因此您的通配符尝试将不起作用,但您的方法是正确的

## \w+ captures 1+ word characters
## -lab- captures case-insensitive literally
## .*? captures any characters up to a whitespace
## )+ captures 1+ instances
$Pattern = '(\w+-lab-.*?)+'
(Get-Content -Path 'Logfile.txt') -replace $Pattern,'sanitized_hostname' |
    Out-File -FilePath 'Sanitized_Logfile.txt' -Encoding 'UTF8'
    ## Set-Content -Path 'Logfile.txt' -Encoding 'UTF8'

你能给我们一份日志文件的样本吗?可能有四行或五行(如果这是CSV,尤其是标题行)。请记住在共享前手动消毒。请发布您的code@Manu是的。只是格式不好。是的,我只是格式化了。这是一大块文字,已经有一个样本了。现在它的格式正确了这成功地取代了word lab,但是只有lab。我需要它来替换完整的主机名steve lab food和其他包含单词lab的主机名。所有主机名的格式都是
word
format@steve?5/25/2017 9:49:21 AM扫描摘要NAVS-lab-UEA02扫描摘要5/25/2017 9:49:21 AM扫描摘要NAV3-lab-UE04扫描的文件:0 5/25/2017 9:49:21 AM扫描摘要NAV5-LAB-UE06检测文件:0 5/25/2017 9:49:21 AM扫描摘要WIN-LAB-UE08文件检测:0 5/25/2017 9:49:21 AM扫描摘要NAVS-LAB-UEA02已清理文件:0我需要找出正确的格式,但这是本文的一个小示例文件日志。随着日志数据的更改,主机名可以位于任何列中。这就是为什么我试图匹配一个共同因素“实验室”,然后用sanitized@Steve更新我的帖子,试试看