提问人:moveit124 提问时间:9/27/2022 最后编辑:mklement0moveit124 更新时间:10/23/2023 访问量:280
替换文本文件中的垂直条
Replace Vertical bar within a text file
问:
我正在尝试替换 |文本文件中的字符。但我不确定该怎么做,因为批次没有读取|。
powershell -Command "(gc output.txt) -replace '|', ' ' | Out-File -encoding ASCII output.txt"
这需要以下输入:80853||OHNED|Mira
和输出:8 0 8 5 3 | | O H N E D | M i r a
我想要这个输出的位置80853 OHNED Mira
批次中是否有替换 |字符?
编辑 - 在谷歌搜索时,我发现 |字符称为竖线。
答:
编辑:这可以完成替换特殊字符的技巧:
@echo off
powershell -Command "(gc input.txt -raw) -replace '([\^&<>\|\(\)!])', ' ' | Out-File output.txt"
start "" output.txt
评论
80853||OHNED|Mira
80853||OHNED|Mira
|
[regex]::Escape()
注意:此答案是在使用 PowerShell CLI (powershell -Command “...”
) 的上下文中提供的,但实质上同样适用于 PowerShell 脚本 (*.ps1
) 和函数中的代码。
\
-eslicing 的替代方法是正则表达式字符集 ([...]
),它还允许您匹配多个字符;例如 'a|b&c' -replace '[|&]' -
> 'abc'
或者,使用正则表达式字符集 ():[...]
Get-ChildItem | Rename-Item -NewName { $_.Name -replace '[?|!&]' }
PowerShell 的 -replace
运算符基于正则表达式;由于您的意图是逐字替换所有字符,因此您必须将 | 转义为
\|
,因为这是一个正则表达式元字符(在正则表达式(正则表达式)的上下文中具有特殊含义的字符):|
|
powershell -Command "(gc output.txt) -replace '\|', ' ' | Out-File -encoding ASCII output.txt"
如果转义单个字符不是一种选择,或者会很麻烦 - 例如,如果你得到一个搜索字符串,你想从字面上看,作为一个整体来对待 - 使用 [regex]::Escape():
powershell -Command "(gc output.txt) -replace [regex]::Escape('|'), ' ' | Out-File -encoding ASCII output.txt"
或者,在简单的情况下,您可以使用 .Replace()
字符串方法,它总是执行逐字替换,因此不需要转义:
powershell -Command "(gc output.txt).Replace('|', ' ') | Out-File -encoding ASCII output.txt"
注意:
- 与 PowerShell 的运算符不同,键入的
.Replace(
) 方法区分大小写,在 Windows PowerShell 中始终如此,在 PowerShell (Core) 6+ 中默认如此。[string]
另请参阅:
评论
|
-replace
(gc output.txt -Raw).Replace('|', ' ') ....