我使用Open3来获得如下命令的结果:
Open3.popen3(service_command) do |stdin, stdout, stderr|
result = stdout.read.delete(' ').split("\n")
end
在stdout.read
返回的字符串中,我发现有类似\e[2K
的控制字符,如何删除这些字符并获得“干净的”字符串?
谢谢
答案 0 :(得分:2)
似乎这些是CSI序列(https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences)
您可以这样删除它们:
REGEXP = /\e\[[^\x40-\x7E]*[\x40-\x7E]/
input = ["\e[mstring1", "\e[2Kstring2", "string3", "\e[2Kstrin4"]
def remove_csi(line)
line.gsub(REGEXP, "")
end
output = input.map do |line|
remove_csi(line)
end
p input
p output
# => ["\e[mstring1", "\e[2Kstring2", "string3", "\e[2Kstrin4"]
# => ["string1", "string2", "string3", "strin4"]
regexp是简化版本,可以从字符串的开头到序列中的“最终字节”进行匹配。