在PowerShell输出到文件之前修复ANSI控制字符

时间:2017-08-16 00:53:48

标签: powershell unicode cmdlets

PowerShell有没有输出没有ANSI控制字符的文件,比如颜色控制,e.x。在输出到文件之前,[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

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

click to view image

2 个答案:

答案 0 :(得分:3)

您可以尝试这样的事情:

"CarType": "mercedes",
"carID": "merc123"

或将其包装在函数中:

{
  cars: [
    {
      "CarType": "BMW",
      "carID": "bmw123"
    },
    {
      "CarType": "mercedes",
      "carID": "merc123"
    },
    {
      "CarType": "volvo",
      "carID": "vol123r"
    },
    {
      "CarType": "ford",
      "carID": "ford123"
    }
  ]
};

答案 1 :(得分:0)

对于Windows系统,可以使用Powershell 3.0中提供的 Replace 命令。powershell使用正则表达式来帮助替换ANSI颜色代码。 (如果是UNIX,则可以使用 sed 命令)

使用正则表达式

以下是用于删除ANSI颜色代码的标准正则表达式(可在Linux和Windows中均使用)

'\x1b\[[0-9;]*m'
  • \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

  • ForEach-Object引用汲取流中的每个对象,$ _引用当前对象。

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