Quando faço select * .. | mysql ... > /tmp/file
a partir de uma tabela com texto, existem alguns caracteres problemáticos que me impedem de carregá-la em um db diferente usando copy
(postgres) ou load into
(mysql). Caractere como tab, nova linha é traduzida automaticamente para \n
e \t
, mas alguns dos caracteres problemáticos são escape ^[
, CR ^M
, ^U
, ^Z
, ^F
e ^H
talvez outros que eu não tenha visto antes.
Normalmente, eu apenas o substituiria como echo "select * .." | mysql .. | sed 's/\r/\\r/g'
, mas há muitos caracteres desconhecidos lá. Então, em vez de substituí-los após a seleção, eu gostaria de uma função que recuperasse o texto já escapado (acho que removê-los também é bom).
Como devo fazer?
Para escapar de todos os caracteres especiais, exceto NULL, nova linha e tab:
select * .. | mysql ... | sed 's/[\x04-\x08\x0B-\x1F\x7F]/ /g' > /tmp/file
link útil:
https://stackoverflow.com/questions/6534556/how-to-remove-and-all-of-the-escape-sequences-in-a-file-using-linux-shell-sc