powershell - 用定义的文本替换文本
问题描述
我有一个包含以下内容的文本文件
php_configuration=up21
sql_configuration=up22
apache_configuration=up23
java_script=down
html=down
我想用 和 替换,和up21
并保持文件的剩余内容不变。up22
up23
cat
dog
elephant
但是当我执行下面的 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
解决方案
你基本上可以这样做:
(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'
推荐阅读
- node.js - 根据节点版本安装不同的包
- javascript - 渲染器进程的工作 VSC 启动配置?(“断点设置但未绑定”问题)
- zsh - 如何根据zsh中上一个命令的退出代码设置提示?
- recursion - prolog - 递归谓词总和(J,K,N)
- javascript - 如何将数据库的行号放入变量中
- ruby-on-rails - 带有以下记录条件的 Activerecord 查询
- javascript - 如何设置构造函数
- reactjs - 使用材质 UI 和 Enzyme 不工作来模拟更改
- amazon-web-services - 如果 CloudWatch 警报在禁用警报操作时更改状态,则不会触发操作
- jquery - JQuery从表中的元素获取数据属性