如何删除红宝石中的控制字符

时间:2019-05-19 02:33:45

标签: ruby linux

我使用Open3来获得如下命令的结果:

Open3.popen3(service_command) do |stdin, stdout, stderr|
    result = stdout.read.delete(' ').split("\n")
end

stdout.read返回的字符串中,我发现有类似\e[2K的控制字符,如何删除这些字符并获得“干净的”字符串?

谢谢

1 个答案:

答案 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是简化版本,可以从字符串的开头到序列中的“最终字节”进行匹配。