如何使用powershell搜索字符串并替换整行? (如果字符串不匹配,则需要使用内容创建新行)

时间:2016-08-22 12:41:02

标签: powershell powershell-v3.0

Sample.txt的:

SQL.test = True
wer.vul = 1
temp_RTE = False
user_admin = no

在上面的文本文件中,我想搜索字符串"test",并使用Windows Powershell脚本将整行替换为"SQL.test = False"。如果"test"文字不匹配,则需要在该文件中添加"SQL.test = False"行。

我试过this。但我无法解决。

请指导我如何实现这一目标。

3 个答案:

答案 0 :(得分:1)

一种方法如下:

$text = 'test'
$found = $false
$infile = '.\a.txt'
$outfile = '.\b.txt'
Get-Content -Path $infile | % { 
    if ($_ -match $text)
    {
        $found = $true
        "SQL.test = False"
    }
    else
    {
        $_
    }
} | Out-File -filepath $outfile
if (!$found)
{
    "SQL.test = False" |Out-File -filepath $outfile -Append
}

这可以进一步优化,我敢肯定。

基本上这样做是使用Get-Content检索文本文件中的每一行,并将它们传递给Select-String。 如果找到文本,则更改行,否则返回原始行。 如果找不到文本,则将其附加。

如果找到文本,则输出为:

SQL.test = False
wer.vul = 1 
temp_RTE = False 
user_admin = no 

否则

wer.vul = 1 
temp_RTE = False 
user_admin = no 
SQL.test = False

答案 1 :(得分:0)

$c = gc .\test.txt
$c | %{ if ( $_ -match "test") { "SQL.test = False" } else {"SQL.test = True"} }

将输出

SQL.test = False
SQL.test = True
SQL.test = True
SQL.test = True

表示输入文件

SQL.test = True
wer.vul = 1
temp_RTE = False
user_admin = no

如果你的意思是在该行添加“sqlxxxx”,只需使用concat + operator

$c | %{ if ( $_ -match "test") { "SQL.test = False" } else {$_ + " SQL.test = True"} }

将输出

SQL.test = False
wer.vul = 1 SQL.test = True
temp_RTE = False SQL.test = True
user_admin = no SQL.test = True

答案 2 :(得分:0)

我认为这应该对你有用:)

# Get content from the original file
$TXT = Get-Content "C:\temp\New Text Document.txt"
#Path to new file
$NewTXT="C:\temp\newTxt.txt"
$i=0
$TXT|ForEach-Object {
    if ($_ -match "test")
        {($_ -replace $_,"SQL.test = False") | Out-File $NewTXT -Append
        $i++ #increment}
      else
        {$_ | Out-File $NewTXT -Append}
}

If ($i -eq 0) #if $i=0 no "test" found, need to add new line "SQL.test = False"
    {"SQL.test = False" | Out-File $NewTXT -Append}