我有一个文本文件,其中包含我用sed获得的以下隐藏字符。
\033[H\033[2J\033
当我用vi打开文件并看到上面的代码时,
^[[H^[[2J^[[H^[[2J
由于这个隐藏的字符在处理文件时遇到了一些问题。在处理之前是否有任何要删除整个文件中的隐藏字符。
答案 0 :(得分:2)
如果文件大小不是太大,您可以读取整个文件内容,然后删除所有转义序列。
content = File.read('your_input_file_path')
content.gsub!(/\033\[(?:H|2J)/, '')
content.split(/\r?\n/).each do |line|
# process line
end
您可以根据转义的序列模式推广使用的正则表达式。在你的例子中,它似乎是\033[
后跟一个可选数字,然后是一个字母。哪个可以更新为:
content.gsub!(/\033\[\d?[A-Z]/, '')
答案 1 :(得分:0)
一种方法是删除ASCII值小于32(" ".ord #=> 32
)的非打印字符。
def remove_invisible(infile, outfile)
File.write(outfile,
File.read(infile).
codepoints.
reject { |n| n < 32 }.
map(&:chr).
join
)
假设File.read(infile)
返回
str = "\033[H\033[2J\033"
#=> "\e[H\e[2J\e"
然后
a = str.codepoints
#=> [27, 91, 72, 27, 91, 50, 74, 27]
b = a.reject { |n| n < 32 }
#=> [91, 72, 91, 50, 74]
c = b.map(&:chr)
#=> ["[", "H", "[", "2", "J"]
c.join
#=> "[H[2J"