gsedを使ってSHIFT_JISで作成されたCSVファイルからマルチバイト文字列を抜き出すプログラムを書こうとしています。
UTF-8で作成された同じ内容のCSVは問題なく変換できるのですが、SHIFT_JISだとうまく変換(キャプチャ)できません。
bash
1test % cat sjis_sample.csv | iconv -f shift_jis -t utf-8 2"こんにちは","hello"% 3test % cat sjis_sample.csv | iconv -f shift_jis -t utf-8 | gsed -r 's/"(.*)","(.*)"/\1 \2/' 4こんにちは hello% 5test % cat sjis_sample.csv | gsed -r 's/"(.*)","(.*)"/\1 \2/' | iconv -f shift_jis -t utf-8 6"こんにちは","hello"%
plain
11行目:ファイルの内容が読める様にUTF-8に変換して出力しました。 22行目:ファイルの内容をUTF-8に変換後、`gsed`でキャプチャ、文字列変換を行い、期待通りの動作になっています。 33行目:ファイルの内容を`gsed`でキャプチャ、文字列変換を行い、出力が読める様にUTF-8に変換して出力しました。 4 2行目と同じマッチパターンですが、ファイルの内容にマッチせず、変換が行われません。
SHIFT_JISのファイルをgsed
で変換する方法についてご存知の方いらっしゃいましたら教えてください。
もしくはファイルからマルチバイト文字列のみ抜き出す他の方法をご存知の方いらっしゃいましたら教えてください。
よろしくお願いします。
plain
1% gsed --version 2gsed (GNU sed) 4.8 3Copyright (C) 2020 Free Software Foundation, Inc. 4License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. 5This is free software: you are free to change and redistribute it. 6There is NO WARRANTY, to the extent permitted by law. 7 8Written by Jay Fenlason, Tom Lord, Ken Pizzini, 9Paolo Bonzini, Jim Meyering, and Assaf Gordon. 10 11This sed program was built without SELinux support. 12 13GNU sed home page: <https://www.gnu.org/software/sed/>. 14General help using GNU software: <https://www.gnu.org/gethelp/>. 15E-mail bug reports to: <bug-sed@gnu.org>.
@otn 様の解決方法を試したところ、無事解決しました!
LANG=C(マルチバイト文字無し)として処理すれば良いかと思います。
@otn 様、ありがとうございました!!!
bash
1test % cat sjis_convert.sh 2#!/bin/bash 3LANG=C 4 5cat sjis_sample.csv |\ 6 gsed -r 's/"(.*)","(.*)"/\1 \2/' |\ 7 iconv -f shift_jis -t utf-8 8 9test % ./sjis_convert.sh 10こんにちは hello%
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/06/12 09:05