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

时间:2017-11-14 15:31:04

标签: powershell

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

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

  • steve-lab-food
  • 两个实验室四
  • 你好-实验室狗

我尝试了以下内容:

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

1 个答案:

答案 0 :(得分:1)

-replace运算符使用正则表达式,因此您的通配符尝试不起作用,但您的方法是正确的。

## \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'