Powershell搜索每个字符串实例,然后替换整行

时间:2014-04-09 14:41:15

标签: powershell-v2.0

我的第一篇文章,所以希望这很顺利! :)

我尝试使用powershell在文件中搜索模式,如果匹配该模式则替换整行。

在目标文件中有2个模式实例。以下代码仅适用于模式的一个实例' jmsPassword':

$file='C:\Temp\ClientConduit.xml'

$line=Select-String $file -pattern "jmsPassword"
$line=$line.linenumber

$content = Get-Content $file
$content|
ForEach-Object {
    if ($_.ReadCount -eq $line) {
        $_ -replace '^.+','           <PROPERTY propname="jmsPassword" proptype="STRING" propvalue="!abcd1234"/>'
   } else {
    $_
   }
  } | Set-Content $file

我有什么想法可以取代所有实例吗?

需要编辑的文本示例部分如下所示:

         <TECHNICIAN class="ParameterTechnician" compressvalets="N" encryptvalets="N" export="Y" name="ParameterTechnician" package="com.extendyourstore.foundation.manager.parameter" singleton="N">
       <PROPERTY propname="configScript" proptype="STRING" propvalue="classpath://config/manager/PosParameterTechnician.xml"/>
       <PROPERTY propname="topicName" proptype="STRING" propvalue="jms/parameters"/>
       <PROPERTY propname="listenForUpdates" proptype="STRING" propvalue="Y"/>

      <!-- comment out following variables if using JBoss -->
       <PROPERTY propname="clientID" proptype="STRING" propvalue="REG103"/>
       <PROPERTY propname="jmsPassword" proptype="STRING" propvalue="MDAxMaiyktgunPc0NKx7QAe3g"/>
       <PROPERTY propname="topicName" proptype="STRING" propvalue="jms/files"/>
       <PROPERTY propname="listenForUpdates" proptype="STRING" propvalue="Y"/>
       <PROPERTY propname="jmsPassword" proptype="STRING" propvalue="MDAxMaityhdxdfc0NKx7QAe3g"/>
       <PROPERTY propname="durableSubscriber" proptype="STRING" propvalue="Y"/>

结果受影响的行应该像这样结束:

         <TECHNICIAN class="ParameterTechnician" compressvalets="N" encryptvalets="N" export="Y" name="ParameterTechnician" package="com.extendyourstore.foundation.manager.parameter" singleton="N">
       <PROPERTY propname="configScript" proptype="STRING" propvalue="classpath://config/manager/PosParameterTechnician.xml"/>
       <PROPERTY propname="topicName" proptype="STRING" propvalue="jms/parameters"/>
       <PROPERTY propname="listenForUpdates" proptype="STRING" propvalue="Y"/>

      <!-- comment out following variables if using JBoss -->
       <PROPERTY propname="clientID" proptype="STRING" propvalue="REG103"/>
       <PROPERTY propname="jmsPassword" proptype="STRING" propvalue="!abcd1234"/>
       <PROPERTY propname="topicName" proptype="STRING" propvalue="jms/files"/>
       <PROPERTY propname="listenForUpdates" proptype="STRING" propvalue="Y"/>
       <PROPERTY propname="jmsPassword" proptype="STRING" propvalue="!abcd1234"/>
       <PROPERTY propname="durableSubscriber" proptype="STRING" propvalue="Y"/>

谢谢!

1 个答案:

答案 0 :(得分:0)

$file='C:\Temp\ClientConduit.xml'
$replace='           <PROPERTY propname="jmsPassword" proptype="STRING" propvalue="!abcd1234"/>'
(Get-Content $file) | % {
    if($_ -like "*jmsPassword*") {
        $_ -replace '^.+',$replace
    }
    else {
        $_
    }
} | set-content $file