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。但我无法解决。
请指导我如何实现这一目标。
答案 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}