powershell命令从文件匹配模式中删除整行

时间:2017-11-05 15:15:17

标签: powershell

从配置文件中删除部分字符串匹配行

配置文件包含以下条目:

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或*,则获得所需的输出

3 个答案:

答案 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/