首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修正PowerShell输出到文件之前的ANSI控制字符

修正PowerShell输出到文件之前的ANSI控制字符
EN

Stack Overflow用户
提问于 2017-08-16 00:53:48
回答 2查看 3.6K关注 0票数 2

PowerShell是否可以输出一个没有ANSI控制字符的文件,比如颜色控制,e.x。[1;xxm[xm],在输出到文件之前,

代码语言:javascript
运行
复制
[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

输出在PowerShell终端中正确显示颜色(我使用了chcp,不工作)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-16 08:50:34

你可以试试这样的方法:

代码语言:javascript
运行
复制
... | ForEach-Object {
    $_ -replace '\[\d+(;\d+)?m' | Add-Content 'C:\path\to\output.txt'
    $_
}

或者将其包装在一个函数中:

代码语言:javascript
运行
复制
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'
票数 8
EN

Stack Overflow用户

发布于 2019-10-09 04:52:57

对于windows系统,可以使用替换命令作为Powershell 3.0的一部分。powershell使用regex表达式来替换颜色代码。(在UNIX情况下,可以使用sed命令)

使用Regex

下面是删除ANSI颜色代码的标准Regex (可以在Linux和windows中使用)

代码语言:javascript
运行
复制
'\x1b\[[0-9;]*m'
  • \x1b (或\x1B)是转义特殊字符。 (sed不支持替代品\e\033)
  • \[是转义序列的第二个字符。
  • [0-9;]*是颜色值regex。
  • m是转义序列的最后一个字符。

最终指挥

我在这里将停靠程序的日志输出到日志中,file.One对其他命令也可以这样做。

docker logs container | ForEach-Object { $_ -replace '\x1b\[[0-9;]*m','' }| Out-File -FilePath .\docker-logs.log

  • ForEach-Object指的是来自pipped流的每个对象,$_是指当前对象。

上面的命令将从输出流中删除特殊字符,如[1;35m[0m[1;3^[[37mABC

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45703539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档