質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

1回答

1103閲覧

gsedにSHIFT_JISの文字列を渡すと認識しない

退会済みユーザー

退会済みユーザー

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2021/06/12 08:32

編集2021/06/12 09:04

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%

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

gsedとはGNU sedのことですかね?

環境変数LANGがUTF-8じゃないですか?であれば、ファイルはUTF-8とみなして処理されます。
Shift_JISをサポートするツールはほとんど無いですが、この程度の処理であれば、
LANG=C(マルチバイト文字無し)として処理すれば良いかと思います。

sh

1LANG=C gsed ~~~

画像だとコピペできないので、コードは文字で載せましょう。今からでも遅くないので、質問文を編集して画像を消して文字で載せましょう。

投稿2021/06/12 08:48

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/12 09:05

ご指摘の方法で解決しました!!!ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問