Golang Go语言中怎么移除命令日志里的控制字符, 不依赖 shell 命令
Script started on 2020 年 11 月 17 日 星期二 10 时 20 分 31 秒
sh: 0: getcwd() failed: No such file or directory
$ bash
]0;myuser@vir-secu3: /var/snap/amazon-ssm-agent/3315 [01;32mmyuser@vir-secu3 [00m: [01;34m/var/snap/amazon-ssm-agent/3315 [00m$ cd /data/myuser/we -se cu-standby/
]0;myuser@vir-secu3: /data/myuser/secu-standby [01;32mmyuser@vir-secu3 [00m: [01;34m/data/myuser/secu-standby [00m$ ./deploy.sh ./de [K [K [K [K [K
deploy time: 2020-11-17_06-59-12
Golang Go语言中怎么移除命令日志里的控制字符, 不依赖 shell 命令
更多关于Golang Go语言中怎么移除命令日志里的控制字符, 不依赖 shell 命令的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这跟 go 没半毛钱关系啊,日志怎么收集的?不能用 stdout 和 stderr 吗?
更多关于Golang Go语言中怎么移除命令日志里的控制字符, 不依赖 shell 命令的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
代理工具采集的. 正则替换就能解决吧
上线的时候关掉打印颜色
使用正则啊:\x1B\[[0-9;]*[A-Za-z]
这些都是 log 的颜色, 你在初始化 log 的时候把颜色关掉就可以了
最好还是我这边处理掉
这个正则只能去掉一部分,还有许多东西遗留(比如说 BEL),自己写怕漏掉什么😂
[\u001B\u009B][\#;?](?:(?:(?:[a-zA-Z\d](?:;[a-zA-Z\d]))?\u0007)|(?:(?:\d{1,4}(?:;\d{0,4})*)?[\dA-PRZcf-ntqry=><~]))
在Go语言中,移除命令日志里的控制字符,可以通过遍历字符串并过滤掉非打印字符来实现,而不依赖外部shell命令。控制字符通常指的是ASCII码中0到31之间的字符,以及127(DEL)。
以下是一个示例代码,展示了如何在Go中完成这一任务:
package main
import (
"fmt"
"unicode"
)
// removeControlChars 移除字符串中的控制字符
func removeControlChars(s string) string {
runes := []rune(s)
filtered := make([]rune, 0, len(runes))
for _, r := range runes {
if !unicode.IsControl(r) {
filtered = append(filtered, r)
}
}
return string(filtered)
}
func main() {
logWithControlChars := "Hello\x07World\x1b!"
cleanedLog := removeControlChars(logWithControlChars)
fmt.Println("Original:", `"`+logWithControlChars+`"`)
fmt.Println("Cleaned: ", `"`+cleanedLog+`"`)
}
在这个例子中,removeControlChars
函数遍历输入字符串的每个字符(rune),并使用 unicode.IsControl
检查是否为控制字符。如果不是控制字符,则将其添加到新的字符串中。最后,返回清理后的字符串。
这种方法适用于任何包含控制字符的字符串,并且不依赖于外部shell命令,确保了代码的可移植性和独立性。