2016-09-20 62 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" 
相關問題