从配置文件中删除部分字符串匹配行
配置文件包含以下条目:
hello=path entry=990_342_33_0.1
hello=33321 entry=67889_44_33_0.1
hello=3332 entry=456_234_17_0.0
配置文件中的预期输出:
hello=path entry=990_342_33_0.1
hello=3332 entry=456_234_17_0.0
其中:$d = 44
命令:
Set-Content -Path "file.config" -Value (get-content -Path "file.config" | Select-String -Pattern 'entry=67889_$d_*_0.1' -NotMatch)
在上面的命令执行中没有任何反应,但如果我们直接使用单词$ d或*,则获得所需的输出
答案 0 :(得分:0)
您必须将-Pattern
字符串放入双引号中(有关引号的更多信息:http://www.computerperformance.co.uk/powershell/powershell_quotes.htm),然后将$d_33_0
视为变量。
因此,您必须将$d
替换为${d}
。
Set-Content -Path "file.config" -Value (get-content -Path "file.config" | Select-String -Pattern "entry=67889_${d}_33_0.1" -NotMatch)
答案 1 :(得分:0)
试试这个:
(import-csv C:\Temp\config.txt -delimiter ' ' -Header Field1, Field2 |
where {($_.Field2 -split '_')[1] -ne '44'} | %{"{0} {1}" -f $_.Field1,$_.Field2}) | Set-Content C:\Temp\config.txt
答案 2 :(得分:0)
如果您只是使用双引号并将变量放在字符串中的SubExpression运算符中,它将正确展开它。我建议在所有字符串中使用这些SubExpression运算符以确保获得正确的结果。
它们看起来像$($ myVar)
例如:
Set-Content -Path "file.config" -Value (get-content -Path "file.config" | Select-String -Pattern "entry=67889_$($d)_33_0.1" -NotMatch)
https://blogs.technet.microsoft.com/stefan_stranger/2013/09/25/powershell-sub-expressions/