powershell - 如何使用powershell脚本替换文本文件中的值
问题描述
我的文件包含以下数据(无标题)
DEPOSIT ADD 123456789 (VALUE)(VARIABLE) NNNN VALUEVARIABLE
DEPOSIT ADD 234567890 (VALUE)(P75) NNNN VALUEVARIABLE
DEPOSIT ADD 345678901 (VALUE)(VARIABLE) NNNN VALUEVARIABLE
这是一个制表符分隔的文本文件。共有5列。(123456789 (VALUE)(VARIABLE) 是单值列)
我的要求是:
- 我只需要获取包含P75的行以在同一文件中更新。
- 在获取P75后,我必须替换 Col3、Col4 和 Col5 中的值,其他行应该不受影响。
从
DEPOSIT ADD 234567890 (VALUE)(P75) NNNN VALUEVARIABLE
到
DEPOSIT ADD 234567890 (VTG)(SPVTG) TCM VTGSPVTG
- 只有包含 P75 的记录才应该这样更新。所有选定记录的替换值相同。
我写的脚本是
$original_file='C:\Path\20200721130155_copy.txt' -header Col1,Col2,Col3,Col4,Col5,| Select Col3,Col4,Col5
(Get-Content $original_file) |ForEach-Object {
if($_.Col3 -match '(VALUE)(P75)')
{
$_ -replace '(VALUE)(P75)', '(VTG)(SPVTG)' `
-replace 'VALUEVARIABLE', 'VTGSPVTG' `
-replace 'NNNN', 'TCM' `
}
$_
}| Set-Content $original_file+'_new.txt' -Force
我得到具有相同内容的输出文件。该文件没有得到更新。
请指教。
谢谢
解决方案
您可以执行以下操作:
$newfile = "{0}_new.txt" -f $original_file
Get-Content $original_file | Foreach-Object {
if ($_ -match '\(VALUE\)\(P75\)') {
$_ -replace '\(VALUE\)\(P75\)','(VTG)(SPVTG)' -replace 'VALUEVARIABLE', 'VTGSPVTG' -replace 'NNNN', 'TCM'
} else {
$_
}
} | Set-Content $newfile -Force
由于-replace
使用正则表达式,因此您必须使用反斜杠转义特殊的正则表达式字符,例如(
and )
。
由于$_
是从Get-Content
without读取的当前行,因此如果您不想进行任何更改-Raw
,则需要输出。$_
如果您确实要替换文本,$_ -replace 'regex','text'
则将输出带有替换文本的该行。
或者,您可以在语句中应用上述相同的逻辑switch
,这样效率更高:
$newfile = "{0}_new.txt" -f $original_file
$(switch -regex -file $original_file {
'\(VALUE\)\(P75\)' {
$_ -replace '\(VALUE\)\(P75\)','(VTG)(SPVTG)' -replace 'VALUEVARIABLE', 'VTGSPVTG' -replace 'NNNN', 'TCM'
}
default { $_ }
}) | Set-Content $newfile -Force
推荐阅读
- python - 使用 summary_out 时将回归结果导出为 csv 文件
- python - 如何上下文管理多个 zip 文件的 BytesIO?
- javascript - 为什么 queryselector 没有单击 HTML 页面中的类元素?
- network-programming - rps过程使用带有local_irq_disable的spinlock的原因
- pi - 为 Pi-Strech 安装 Flask 和 Paho mqtt 时出错
- swift - Swift 4:不推荐使用“init”。CountableRange 现在是 Range
- c++ - 如何实际获取要插入此链表 C++ 的值
- python - 使用 BeautifulSoup 抓取网页时出错
- python - 训练后如何获得过滤器权重?
- python - 将列表/嵌套列表列表转换为不嵌套列表列表