Dan*_*.zZ 0 unicode powershell cmdlets
无论如何,PowerShell是否可以在输出到文件之前先输出不含ANSI控制字符(例如颜色控制,ex [1;xxm或)[xm]的文件,
[1;35mStarting selenium server... [0m[1;35mstarted - PID: [0m 22860
[0;36m[Signin Test] Test Suite[0m
[0;35m================================[0m
Running: [0;32mstep 1 - launch the browser[0m
[1;35m[40mINFO[0m [1;36mRequest: POST /wd/hub/session[0m
Run Code Online (Sandbox Code Playgroud)
输出在PowerShell终端中以颜色正确显示(我用过chcp,不起作用)
对于 Windows 系统,可以使用Powershell 3.0 中提供的Replace命令。powershell 使用正则表达式来帮助替换 ANSI 颜色代码。(如果是 UNIX,可以使用sed命令)
下面是删除 ANSI 颜色代码的标准正则表达式(可在 Linux 和 Windows 中使用)
'\x1b\[[0-9;]*m'
Run Code Online (Sandbox Code Playgroud)
\x1b(或\x1B) 是转义特殊字符sed不支持替代\e和\033)\[是转义序列的第二个字符[0-9;]*是颜色值正则表达式m是转义序列的最后一个字符我在这里将 docker 的日志输出到日志文件。其他命令也可以这样做
docker logs container | ForEach-Object { $_ -replace '\x1b\[[0-9;]*m','' }| Out-File -FilePath .\docker-logs.log
上面的命令将从输出流中删除特殊字符,例如[1;35m,[0m[1;3和。^[[37mABC
您可以尝试这样的事情:
... | ForEach-Object {
$_ -replace '\[\d+(;\d+)?m' | Add-Content 'C:\path\to\output.txt'
$_
}
Run Code Online (Sandbox Code Playgroud)
或将其包装在函数中:
function Tee-ObjectNoColor {
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
[string]$InputObject,
[Parameter(Position=1, Mandatory=$true)]
[string]$FilePath
)
Process {
$InputObject -replace '\[\d+(;\d+)?m' | Add-Content $FilePath
$InputObject
}
}
... | Tee-ObjectNoColor -FilePath 'C:\path\to\output.txt'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
665 次 |
| 最近记录: |