我有一个要在Powershell中 sed 的json配置。这是config.json中的条目:
"gateway.public.host": "http://placeholder.ourdomain.com",
我想找到与字符串gateway.public.host
匹配的行,但是我想在该行上替换单词placeholder
。
我在Powershell上找到的大多数示例都是找到一个匹配项并替换该匹配项。
答案 0 :(得分:1)
在这里,正则表达式方法很明显。从一行的开头一直到“占位符”匹配所有内容,并用捕获组替换捕获组后保留文本的其余部分。
(Get-Content $file) -replace "(.*gateway.public.host.*)placeholder", '$1ReplacementText'
许多其他正则表达式也将在这里工作。
不过,我们还可以在PowerShell中使用cmdlet ConvertFrom-Json
和ConvertTo-Json
$json = '{
"gateway.public.host": "http://placeholder.ourdomain.com"
}'
$jsonObject = $json | ConvertFrom-Json
$jsonObject."gateway.public.host" = $jsonObject."gateway.public.host" -replace "placeholder", "holdplacer"
$jsonObject | ConvertTo-Json -Depth 5
哪个会帮到您
{
"gateway.public.host": "http://holdplacer.ourdomain.com"
}
是的,我要承认那里还有更多代码。使用此方法,可以使代码更整洁,具体取决于您的开始以及最终的目标。
答案 1 :(得分:1)
替换是SED等效项的一种。看到您是Powershell的新手,我会选择第一种方法。
如果您的情况确实如此:
$Json = Get-Content filename.json
$Json = $Json -replace ("`"gateway.public.host`": `"http://placeholder.ourdomain.com`"","`"gateway.public.host`": `"http://newvalue.ourdomain.com`"")
$Json | Set-Content filename.json -Force
或者您可以单行完成
(Get-Content filename.json).replace("`"gateway.public.host`": `"http://placeholder.ourdomain.com`"","`"gateway.public.host`": `"http://newvalue.ourdomain.com`"") | Set-Content filename.json
在Powershell中,cat
是get-content
的别名,因此,如果您想“感觉”更多的Linux,甚至可以这样做:
cat filename.json | %{$_ -replace "`"gateway.public.host`": `"http://placeholder.ourdomain.com`"","`"gateway.public.host`": `"http://newvalue.ourdomain.com`""} | Set-Content filename.json