2016-09-20 88 views
1

我被给了一个MySQL数据库的转储,并且希望在MySQL模式下将它加载到H2中。它运作良好,到目前为止除了“用户”表,这已经哈希密码中,并给出了这个错误:插入/替换散列值:“十六进制字符串包含非十六进制字符”

'Hexadecimal string contains non-hex character: "UQ�m������l�a_x"; 
SQL statement:INSERT INTO `users` VALUES (2,16,'him','UQ�m������l�a_x', ...); 

由于它们没有用在这种情况下,我可以与任何其他替代这些十六进制字符串文本值。例如,我可以用sed来做到这一点吗?

我试过这个:sed -e "s/'[\d128-\d255]'//g但它取代了我文件的95%。

我已经看到了准备JDBC语句的答案,但我没有办法(这些是Play框架的自动应用“演变”)。

回答

2

除去非ASCII文本可以使用trsed,这里是使用tr一个简单的例子:

echo -e "\xA9 "This is acsii text" \xA7 \xA3 \xA1 \xA2" 
© This is acsii text § £ ¡ ¢ 

而非ASCII字符删除:使用tr -c -d '[[:alnum:]]|[[:space:]]|[:punct:]]'

echo -e "\xA9 "This is acsii text" \xA7 \xA3 \xA1 \xA2" |tr -c -d '[[:alnum:]]|[[:space:]]|[[:punct:]]' 
This is acsii text 

OR

echo -e "\xA9 "This is acsii text" \xA7 \xA3 \xA1 \xA2" |tr -cd '\000-\177' 
This is acsii text 
+0

使用TR版本,它给现在的“十六进制字符串奇数个字符:‘UQmla_x’” :(但它的工作原理,你回答了这个问题。 – JulienD

+0

尽管它在我的用例中起作用,但我相信在“:punct:”:'[[:alnum:]] | [[:space:]] | [[:punct:]]'附近缺少一个括号。 – JulienD

+0

@JulienD感谢您指出错误。 –

0

使用另一个swer,我设法把它在sed工作(增加的可能性,以取代)如下:

sed -E -e "s/[^[:alnum:][:space:][:punct:]]//g"