ruby删除ctrl-H字符
在我的一个日志文件中,我有以下隐藏值和颜色ASCII码ruby删除ctrl-H字符,ruby,regex,Ruby,Regex,在我的一个日志文件中,我有以下隐藏值和颜色ASCII码 ...WAITING^H^H^H^H^H^H^H^H^H^H 我可以用下面的方法删除颜色ASCII码 gsub(/\e\[(\d+)(;(\d+))?m/, '') 但我仍然无法删除上面提到的隐藏字符。有什么办法可以摆脱它们吗?理论 退格? 如果ctrl-H字符是退格: puts "foo\b\b\bbar" #=> "bar" puts "foo\b\b\bbar".delete("\b") #=> "foobar"
...WAITING^H^H^H^H^H^H^H^H^H^H
我可以用下面的方法删除颜色ASCII码
gsub(/\e\[(\d+)(;(\d+))?m/, '')
但我仍然无法删除上面提到的隐藏字符。有什么办法可以摆脱它们吗?理论
退格?
如果ctrl-H
字符是退格:
puts "foo\b\b\bbar"
#=> "bar"
puts "foo\b\b\bbar".delete("\b")
#=> "foobar"
注意:delete
在这里很好,因为我们只使用一个字符
还是“^H”子字符串?
如果ctrl-H
字符是“^H”
:
注意:delete
在这里不起作用,因为它还会从字符串中删除每个H
字符,而不仅仅是子字符串^H
。另外,使用delete(“^H”)
意味着删除所有不是“H”的字符。
。因此:
"foo^H^H^Hbar".delete("^H") => "HHH"
试验
与:
bytes = [46, 46, 46, 87, 65, 73, 84, 73, 78, 71, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 91, 32, 32, 32, 79, 75, 32, 32, 32, 93, 10, 27, 91, 63, 49, 50, 108, 27, 91, 63, 50, 53, 104, 68, 111, 110, 101, 33, 10, 10]
我们得到:
string = bytes.map(&:chr).join
string # => "...WAITING\b\b\b\b\b\b\b\b\b\b[ OK ]\n\e[?12l\e[?25hDone!\n\n"
puts string
# [ OK ]
# Done!
#
等于8
的字节是退格,当与put
一起显示时,它们会删除WAITING
。
第一种选择应该很好:
puts string.delete("\b")
# ...WAITING[ OK ]
# Done!
注意:这仅适用于原始数据,其中退格为byte8
。任何复制粘贴、使用cat
、|
或文本编辑器都可能将其转换为“^H”
或其他字符串。
退格?
如果ctrl-H
字符是退格:
puts "foo\b\b\bbar"
#=> "bar"
puts "foo\b\b\bbar".delete("\b")
#=> "foobar"
注意:delete
在这里很好,因为我们只使用一个字符
还是“^H”子字符串?
如果ctrl-H
字符是“^H”
:
注意:delete
在这里不起作用,因为它还会从字符串中删除每个H
字符,而不仅仅是子字符串^H
。另外,使用delete(“^H”)
意味着删除所有不是“H”的字符。
。因此:
"foo^H^H^Hbar".delete("^H") => "HHH"
试验
与:
bytes = [46, 46, 46, 87, 65, 73, 84, 73, 78, 71, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 91, 32, 32, 32, 79, 75, 32, 32, 32, 93, 10, 27, 91, 63, 49, 50, 108, 27, 91, 63, 50, 53, 104, 68, 111, 110, 101, 33, 10, 10]
我们得到:
string = bytes.map(&:chr).join
string # => "...WAITING\b\b\b\b\b\b\b\b\b\b[ OK ]\n\e[?12l\e[?25hDone!\n\n"
puts string
# [ OK ]
# Done!
#
等于8
的字节是退格,当与put
一起显示时,它们会删除WAITING
。
第一种选择应该很好:
puts string.delete("\b")
# ...WAITING[ OK ]
# Done!
注意:这仅适用于原始数据,其中退格为byte
8
。任何复制粘贴、使用cat
、
或文本编辑器都可能将其转换为“^H”
或其他字符串。“…等待^H^H^H^H^H^H”。删除('/^H')
@AlexGolubenko:No。它删除的内容太多:“…waithting^H^H^H^H^H”。删除('/^H')
-“^H>”)
@EricDuminil你的权利'…等待^H^H^H^H^H^H^H^H^H'.删除('/^H')
@AlexGolubenko:不。它删除了太多:'…等待^H^H^H^H^H^H^H^H'.删除('/^H')
->“…等待”
@EricDuminil你的权利“^H”
不是backspaces,这是我使用-e
选项对该文件进行cat时发现的。它的隐藏字符,即使我将^H
放入gsub,它也不起作用。我认为需要获取这个隐藏字符的ASCII值并将其删除。是否有方法获取此隐藏字符的ASCII值。另外,字符“…WAITING”
也隐藏了一个字符,通常不可见,只能使用cat-e查看。好的。你能用your\u string\u的结果更新你的问题吗?每个字节都有隐藏的字符。到a?以下是输出,irb(main):001:0>str=“…WAITING^H^H^H^H^H^H^H[OK]”“=>”…WAITING ^H^H^H^H^H^H^H^H[OK]”irb(main):002:0>str[46,46,46,87,65,73,84,73,78,71,94,72,72,72,72,94,72,72,94,72,72,94,72,72,94,72,94,72,72,72,72,94,72,91,32,32,32,79,75,32,32,93]内部评级机构(主要):003:0>
您将此字符串从日志文件复制粘贴到您的irb中,对吗?太晚了,它已经删除了隐藏字符。gsub
可以处理您发送给我的字节。您可以复制日志文件,只需保留此“等待”行并使用:file.open(“your.log”)读取它。每个字节。到a
谢谢。您看到所有的8
?这些都是退格。delete(“\b”)
应该可以正常工作,只要您处理直接来自文件的数据。不是从cat
或vim
复制的字符串。它的“^H”
不是backspaces,这是我在使用-e
选项对该文件进行cat时发现的。它的隐藏字符,即使我将^H
放入gsub,它也不起作用。我认为需要获取此隐藏字符的ASCII值并将其删除。是否有方法获取此隐藏字符的ASCII值。还有字符“…WAITING”
也隐藏了一个字符,通常不可见,只能使用cat-e查看。好的。请用你的字符串的结果更新你的问题,每个字符串都有隐藏的字符。到a
?这是输出,irb(main):001:0>str=“…WAITING^H^H^H^H^H^H[OK]”…等待^H^H^H^H^H^H^H^H^H[OK]“irb(main):002:0>str.each_byte.to_a=>[46,46,46,87,65,73,84,73,78,71,94,72,72,94,72,72,72,72,72,72,72,94,72,72,72,72,72,72,72,91,32,79,75,32,93]irb(main):003:0>
您将此字符串从日志文件复制粘贴到您的irb中,对吗?太晚了,它已经删除了隐藏字符。gsub
可以处理您发送给我的字节。您可以复制日志文件,只需保留此“等待”行并使用:file.open(“your.log”)读取它。每个字节。到a
谢谢。您看到所有8
?这些都是退格。delete(“\b”)
应该可以正常工作,只要您处理直接来自文件的数据。而不是从cat
或vim
复制的字符串。