首页 > 解决方案 > 用定义的文本替换文本

问题描述

我有一个包含以下内容的文本文件

php_configuration=up21
sql_configuration=up22
apache_configuration=up23
java_script=down
html=down

我想用 和 替换,和up21并保持文件的剩余内容不变。up22up23catdogelephant

但是当我执行下面的 powershell 脚本时,它将替换字符串,但不会保留文本文件的剩余内容:

$a=Get-Content -Path C:\Users\Administrator\Desktop\Pow\loc.txt |Select-String -Pattern 
    "php_configuration"|ForEach-Object {$_ -Replace 'up21', 'cat'}
          
        
$b=Get-Content -Path C:\Users\Administrator\Desktop\Pow\loc.txt |Select-String -Pattern 
    "sql_configuration"|ForEach-Object {$_ -Replace 'up22', 'dog'}
        
$c=Get-Content -Path C:\Users\Administrator\Desktop\Pow\loc.txt |Select-String -Pattern 
    "apache_configuration"|ForEach-Object {$_ -Replace 'up23', 'elephant'}
        
$a, $b, $c| Set-Content -Path C:\Users\Administrator\Desktop\Pow\loc.txt

标签: powershell

解决方案


你基本上可以这样做:

(Get-Content 'C:\Users\Administrator\Desktop\Pow\loc.txt') | Foreach-Object {
 $_ -replace 'up21', 'cat' `
    -replace 'up22', 'dog' `
    -replace 'up23', 'elephant'
 } | Set-Content 'C:\Users\Administrator\Desktop\Pow\loc.txt'

是否需要指定“php_configuration”等?

编辑:好的,在阅读了下面@T-Me 的评论后,我改变了答案。不是最漂亮的,但给你。

(Get-Content 'C:\Users\Administrator\Desktop\Pow\loc.txt') | Foreach-Object {
     if($_ | Select-string -Pattern "php_configuration"){$_ -replace 'up21', 'cat'}
     elseif($_ | Select-String -Pattern "sql_configuration"){$_ -replace 'up22', 'dog'}
     elseif($_ | Select-String -Pattern "apache_configuration"){$_ -replace 'up23', 'elephant'}
     else {$_}
     } | Set-Content 'C:\Users\Administrator\Desktop\Pow\loc.txt'

推荐阅读