2016-08-21 3 views
1

У меня есть текстовый файл, который содержит скрытые символы, которые я получил с sed.ruby ​​удалить скрытые символы из всего файла

\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

Thats Хорошо, и я понял. Спасибо за вашу помощь! – 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

Как я могу удалить такие скрытые символы? ^ [[5m ^ [(B ^ [[м ^ M По крайней мере, если я могу просто удалить^одни его хорошо. – Karthi1234

+0

я не понимаю. ' "^" 'Не скрытый характер –

+0

жалко, это был возврат каретки – Karthi1234

Смежные вопросы