当我select * .. | mysql ... > /tmp/file
从带有文本的表中进行操作时,有一些有问题的字符会阻止我使用copy
(postgres)或load into
(mysql)将其加载到不同的数据库中。诸如制表符、换行符之类的字符会自动转换为\n
and \t
,但一些有问题的字符是 escape ^[
、 CR ^M
、^U
、^Z
、^F
,^H
也许还有其他我以前没见过的字符。
通常我会像 一样替换它echo "select * .." | mysql .. | sed 's/\r/\\r/g'
,但是那里有太多未知字符。因此,与其在选择后替换它们,我想要一个检索已经转义的文本的函数(我想删除它们也可以)。
我该怎么做?
要转义除 NULL、新行和制表符之外的所有特殊字符:
select * .. | mysql ... | sed 's/[\x04-\x08\x0B-\x1F\x7F]/ /g' > /tmp/file
有用的链接:
https://stackoverflow.com/questions/6534556/how-to-remove-and-all-of-the-escape-sequences-in-a-file-using-linux-shell-sc