2016-08-21 68 views
1

我有文本文件,其中包含我用sed得到的隐藏字符。红宝石从整个文件中删除隐藏的字符

\033[H\033[2J\033 

当我打开用vi文件,看到如下上面的代码,

^[[H^[[2J^[[H^[[2J 

由于这个隐藏字符现在面临的一些问题,在处理文件。在处理它之前,有没有什么可以摆脱整个文件中的隐藏字符。

回答

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

'content.gsub!(/ \ 033 \ [\ d?[AZ] /, '')'正在完善。谢谢! 如果我想删除所有种类的隐藏字符(如上面的隐藏字符不同),是否有最好的方法? – Karthi1234

+0

@Karthick真的取决于你的真实情况,我不能在这里给出答案。 –

+0

那就好,我明白了。谢谢你的帮助! – Karthi1234

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" 
+0

如何删除隐藏字符以下的字符? ^ [[5分 ^ [(B ^ [[M ^ M 至少如果我可以删除^单独的罚款。 – Karthi1234

+0

我不明白。' “^”'是不是隐藏角色 –

+0

对不起,这是回车 – Karthi1234