插入/替换哈希值:"十六进制字符串包含非十六进制字符"

时间:2016-09-20 09:20:09

标签: bash sed hex h2

我获得了MySQL数据库的转储,并希望在MySQL模式下将其加载到H2中。到目前为止,除了"用户" table,其中包含密码并出现此错误:

'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语句的答案,但我没有动手(这些是自动应用的" evolutions" Play框架)。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用另一个答案,我设法让它在sed中工作(增加替换的可能性),如下所示:

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