職場を忘れたCTOのブログ
六本木のとある会社の最高技術責任者(CTO)をやっています。
Amebaでブログを始めよう!
1 | 2 | 3 | 4 | 5 | 最初次のページへ >>

【linux】機種依存文字の検索と削除

エンドユーザが入力したデータの中で、以下のようなレコードがあった。


00000000 32 33 39 33 33 38 33 09 32 30 31 34 30 34 32 34 |2393383.20140424|
00000010 31 33 30 34 34 32 30 39 39 39 35 37 36 35 39 31 |1304420999576591|
00000020 38 39 36 09 6d 31 34 38 37 39 36 39 39 33 09 e2 |896.m148796993..|
00000030 91 a0 ef bd 9e e2 91 a4 e2 99 a1 e3 82 ad e3 83 |................|
00000040 a3 e3 83 90 e5 ac a2 ef bf bf e3 83 91 e3 83 bc |................|
00000050 e3 83 86 e3 82 a3 e3 83 bc e3 83 89 e3 83 ac e3 |................|
00000060 82 b9 e2 99 a1 e7 89 b9 e5 88 a5 e3 81 be e3 81 |................|
00000070 a8 e3 82 81 e5 a3 b2 e3 82 8a 09 31 32 38 30 30 |...........12800|
00000080 09 31 09 31 32 38 30 30 09 32 30 31 34 2d 30 34 |.1.12800.2014-04|
00000090 2d 32 34 20 31 33 3a 30 35 3a 30 36 2e 31 37 34 |-24 13:05:06.174|
000000a0 31 38 32 2b 30 39 0a |182+09.|
000000a7


ここで問題なのが、「ef bf bf」というHEXのコード。

他はテキストなのに、ここだけ変換できず、RedShiftに入れようと思うと以下のエラーが発生する。

String contains invalid or unsupported UTF8 codepoints. Bad UTF8 hex sequence: ef bf bf (error 7)

結局、HEXでgrepしてsedで置換した。


grep -l $'\xef\xbf\xbf' ./*.txt | xargs sed -i.bak -e 's/\xef\xbf\xbf//g'


【RedShift】std_load_errorsの確認方法

以下のSQLを実行することで確認できます。


select distinct tbl, trim(name) as table_name, query, starttime,
trim(filename) as input, line_number, colname, err_code,
trim(err_reason) as reason
from stl_load_errors sl, stv_tbl_perm sp
where sl.tbl = sp.id
order by starttime desc

【Linux】複数ファイルから該当文字列を一括置換

find ./ -type f | xargs sed -i "s/hoge/fuga/g"
1 | 2 | 3 | 4 | 5 | 最初次のページへ >>