/ / ruby ​​odstráni znaky ctrl-H - ruby, regex

ruby odstrániť znaky ctrl-H - rubín, regex

Na jednom z mojich protokolových súborov mám nižšie skryté hodnoty a farebné kódy ASCII,

...WAITING^H^H^H^H^H^H^H^H^H^H

Podarilo sa mi odstrániť farebné kódy ASCII pomocou metódy uvedenej nižšie,

gsub(/e[(d+)(;(d+))?m/, "")

ale stále nemôžem odstrániť vyššie uvedené skryté znaky. Existuje nejaký spôsob, ako sa ich zbaviť?

odpovede:

7 pre odpoveď č. 1

Backspaces?

Ak ctrl-H znaky sú medzery:

puts "foobbbbar"
#=> "bar"

puts "foobbbbar".delete("b")
#=> "foobar"

POZNÁMKA: delete je tu v poriadku, pretože ho používame iba s jednou postavou.

Alebo „^ ​​H“ podreťazec?

Ak ctrl-H znakov "^H" :

puts "foo^H^H^Hbar".gsub(/^H/,"")
#=> "foobar"

POZNÁMKA: delete tu by nefungoval, pretože by tiež odstránil všetky H znak z reťazcov, nielen podreťazec ^H, Tiež pomocou delete("^H") prostriedky delete every character that isn"t a "H". Takže:

"foo^H^H^Hbar".delete("^H") => "HHH"

skúška

S:

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]

Dostaneme :

string = bytes.map(&:chr).join
string # => "...WAITINGbbbbbbbbbb[   OK   ]ne[?12le[?25hDone!nn"
puts string
# [   OK   ]
# Done!
#

Bajty sa rovnajú 8 sú backspace a odstránia sa WAITING keď sa zobrazuje s puts. Prvá alternatíva by mala fungovať dobre:

puts string.delete("b")
# ...WAITING[   OK   ]
# Done!

POZNÁMKA: Toto funguje iba na pôvodné údaje, v ktorých sú backspace bajty 8. Akékoľvek kopírovanie a vkladanie, použitie cat, | alebo textový editor ich môže previesť na "^H" alebo iný reťazec.