我有一个非常简单的替换功能。它通过一个IP地址列表并替换前3个八位字节。看来他们必须按照特定的顺序,为什么?
工作:
$testips = Import-CSV Test.csv
function change_PROD_IP
{
$PROD_oldIP = $line.NodeIP
$PROD_newIP = $line.NodeIP -replace "10.245.0.","10.165.221." `
-replace "10.245.14.","10.165.233." `
-replace "10.245.15.","10.165.234." `
-replace "10.245.12.","10.165.236." `
-replace "10.245.13.","10.165.237." `
-replace "10.245.1.","10.165.222." `
Add-Content -Path Production_Nodes_Test.csv -Value "$PROD_Oldip, $PROD_newIP"
}
foreach ($line in $testips) {change_PROD_ip}
但如果我采取最后一行并将其放在第一位:
-replace "10.245.1.","10.165.222." `
然后它开始使用这一行代替10.245.12/13/14
,即第三个八位字节以1开头的任何东西。为什么会这样,因为它是一个带有“。”的显式定义。在1?
答案 0 :(得分:5)
我认为您不知道.
使用 regex 替换内容而\.
匹配任何字符。因此,您必须使用反斜杠转义您的点:$line.NodeIP.Replace("10.245.0.","10.165.221.").Replace(.....
或使用Replace方法intead:
JdbcTemplate template = new JdbcTemplate(dataSource);
ResultSetExtractor<HashMap<String, String>> rse = rs -> {
HashMap<String, String> retVal = new HashMap<>();
while(rs.next()) {
retVal.put(rs.getString("Key"), rs.getString("Value"));
}
return retVal;
};
HashMap<String, String> result = template.query("select Key, Value from Table", rse);