【初月無料キャンペーン中】gooドクター

こんにちは。

LinuxやWindows用のsedコマンドには、[・・・]という演算子によって、
特定の範囲の文字集合が指定できます。
例えば
sed "s/[a-zA-Z]//g" test.txt
というコマンドによって、test.txtから、アルファベットを削除する事ができます。

では、シフトJISコードにおいて、全ての2バイト文字を指定するにはどうすればよいのでしょうか?
シフトJISコードでは、最初の漢字が「亜」であり、最後の漢字が「黑」らしいので、
sed "s/[あ-んア-ン亜-黑]//g"
といったコマンドを試しましたが、これでは
「ー」「、」「。」「ぁぃぅぇぉ」といった文字が残ってしまいます。

結局は、シフトJISコードの2バイト文字の範囲を知りたいのですが、
調べてみても分かりませんでした。

ご存知の方がいらっしゃれば、情報提供をお願い致します。

gooドクター

A 回答 (1件)

そのsedがShift-JISの「1文字」を「1文字」として処理できるものである必要があります。


「マルチバイト文字に対応」と明記していないものでは、
[あ-んア-ン亜-黑]

「あ」の1バイト目
「あ」の2バイト目から「ん」の1バイト目
「ん」の1バイト目
...
とばらばらに解釈されている可能性があります。

あとは、Shift-JISのコード表を見れば、「あ-ん」には「ぁ」は入ってないし、句読点は別のところにあるのがわかると思います。
http://charset.7jp.net/sjis.html

> [・・・]という演算子
演算子ではないですが...
    • good
    • 1
この回答へのお礼

御回答ありがとうございます。

>そのsedがShift-JISの「1文字」を「1文字」として処理できるものである必要があります。

onigsedというsedコマンドを使っているのですが、試してみると日本語対応していました。

提供して下さったURLを見た所、全角のスペースが2バイト文字の最初の文字であり、「"」という文字が最後の文字のようでした。
そこで
onigsed "s/[ -"]//g" test.txt
とすると、2バイト文字が全て削除できました。

ありがとうございました。

お礼日時:2011/08/21 05:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング