質問: 例えばhtml内にタグがあるのですが ``` sample.html Aa()かなカナ漢字123Aa()123カタカナ ``` 全角スペース 全角アルファベッド(大文字小文字) 全角記号 全角かな 全角カナ 全角漢字 全角数字 半角アルファベッド (大文字小文字) 半角記号 半角数字 半角カタカナ 半角スペース が含まれているタグ内文字列があります。 --- やりたいことは ・全角スペースを半角スペースに変換 ・全角アルファベッドを半角アルファベッドに変換 (大文字小文字) ・全角記号を半角記号に変換 ・全角数字を半角数字に変換 ・半角カナを全角カナに変換 ・ 全角かな 全角カナ 全角漢字 はそのまま。 --- 結果 ``` sample2.html Aa123()かなカナ漢字 ``` 半角スペース 半角アルファベッド (大文字小文字) 半角数字 半角記号 全角かな 全角カナ 全角漢字 --- そして半角スペースはそのままで 半角アルファベッド (大文字小文字) 半角数字 半角記号 を削除したいです。 --- 結果 ``` sample3.html かなカナ漢字 ``` 半角スペースが残る 全角かな 全角カナ 全角漢字 --- sed (GNU sed) 4.2.2を使って正規表現で このようにするにはどうしたらいいでしょうか?
回答: nkfという全角半角をうまくやってくれるコマンドがあるので、前半はsedでなくそれを使うと良いでしょう(よくあるニーズなのでそれにあったコマンドがある)。 ・半角片仮名→全角片仮名 ・全角英数字→半角英数字 ・全角記号(同じ文字が半角にある物)→半角記号 ・全角空白→半角空白 となります。対応する半角記号がない全角記号はそのままです(※とか)。 文字コードがutf-8だとすると、 ``` nkf -Wwm0 -Z1 入力ファイル | #上記変換 sed 's/[!-~]//g' #半角記号・英数字の削除 ```