PowerShell Import-CSV和replace - 操作顺序

时间:2018-03-20 09:45:22

标签: powershell

我有一个非常简单的替换功能。它通过一个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?

之后

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);