Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby删除ctrl-H字符_Ruby_Regex - Fatal编程技术网

ruby删除ctrl-H字符

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"

在我的一个日志文件中,我有以下隐藏值和颜色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"
注意:
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”
或其他字符串。

退格? 如果
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
复制的字符串。