2016-08-21 81 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