目次
はじめに
Linuxで sed
・grep
・awk
を使って日本語を処理すると、文字化け が起こることがあります。
英語しか扱わない場合は気になりませんが、日本語ログや設定ファイルを扱う現場ではよく出くわす問題です。
文字化けの主な原因は以下の2点です。
- ロケール(locale)設定の不一致
- ファイルの文字コード(Shift_JIS / EUC-JP / UTF-8)の不一致
この記事では、よくある文字化けのパターンをコマンドごとに整理し、解決方法を解説します。
1. 共通の原因と確認方法
ロケールの確認
locale
出力例(悪い例):
LANG=C
LC_CTYPE="C"
→ C
や POSIX
では日本語が扱えません。
ファイルの文字コード確認
file sample.txt
出力例:
sample.txt: Shift_JIS text
→ UTF-8以外の文字コードなら変換が必要です。
2. sedでの文字化け
症状例
$ echo "こんにちは" | sed 's/こん/HELLO/'
HELLO�����
解決策
- ロケールをUTF-8に設定
export LANG=ja_JP.UTF-8 export LC_ALL=ja_JP.UTF-8
- ファイルをUTF-8に変換
iconv -f SHIFT_JIS -t UTF-8 sample.txt > sample_utf8.txt
3. grepでの文字化け
症状例
$ grep "日本語" sample.txt
grep: warning: invalid multibyte character
解決策
- ロケールをUTF-8に変更
- ファイルを
iconv
でUTF-8に統一
実践例
$ iconv -f EUC-JP -t UTF-8 sample.txt | grep "日本語"
日本語の行が正しくヒット
4. awkでの文字化け
症状例
$ echo "日本語テスト" | awk '{print length($0)}'
14
本来「6文字」と数えるべきところが「14バイト」として扱われています。
解決策
- GNU Awk(gawk)を使用する
--posix
や--lint
は外す(マルチバイト非対応になる)- 環境変数でロケールをUTF-8にする
実践例
$ export LANG=ja_JP.UTF-8
$ echo "日本語テスト" | gawk '{print length($0)}'
6
5. 共通の根本解決法
- ロケールは常に UTF-8 に統一する
export LANG=ja_JP.UTF-8 export LC_ALL=ja_JP.UTF-8
- ファイルはUTF-8に変換してから処理する
iconv -f SHIFT_JIS -t UTF-8 in.txt > out.txt
- awkはgawkを使う(古いawkはマルチバイト非対応が多い)
まとめ
- sed → 文字化けはロケールとファイル文字コードの不一致が原因
- grep → エラーメッセージが出たら
iconv
で変換 - awk → マルチバイト未対応の実装に注意、gawk推奨
👉 文字化けは「コマンドのバグ」ではなく、
環境設定と文字コードの違いが原因 です。
現場でよく使う対処フローは以下のとおりです。
locale
で環境を確認file
で文字コードを確認export LANG=ja_JP.UTF-8
でUTF-8化- 必要なら
iconv
で変換
これを覚えておけば、sed/grep/awkすべてに応用できます。
あわせて読みたい


【コマンド詳細】sedコマンドの使い方とオプションまとめ
sed コマンドとは? sed (Stream Editor) は、LinuxやUNIXシステムで使われるストリーム形式のテキストエディタです。ファイルを直接開くことなく、以下のようなテキス…
あわせて読みたい


【コマンド詳細】grepの使い方とオプションまとめ
Linuxのgrepコマンドについて grepコマンドは、テキストファイルや標準出力から特定のパターンを検索するためのコマンドです。大量のログファイルから特定の文字列を抽…
あわせて読みたい


【コマンド詳細】awkコマンドの使い方とオプションまとめ
awk コマンドとは? awk は、テキスト処理やデータ解析に特化した強力なツールであり、主に次のような操作に使用されます。 カラム(フィールド)ごとのデータ操作 パタ…
あわせて読みたい


sed で日本語が文字化けする原因と対処方法(ロケール設定、iconv での変換方法)
はじめに sed を使って日本語を含むテキストを処理したとき、文字化けして読めない結果になることがあります。英語だけなら問題なくても、日本語特有の 文字コードやロ…