Linux コマンドでやりたいこと

1.指定ファイルの文字コードを一括で変換する。
2.指定ファイル内の文字列を一括置換。

例)あるディレクトリ配下の HTML ファイルを Shift-JIS から UTF-8 に変換し、HTML 内のcharset を shift_jis から UTF-8 に一括で置換する。

1度にまとめてやるのは難しそうなので、文字コード変換と文字列置換とを2回に分けておこなう。

文字コード一括変換

指定ディレクトリ配下の HTML ファイルの文字コードを Shift-JIS から UTF-8 に一括変換。

find -name '*.html' -exec nkf --overwrite -w {} \;

※指定ディレクトリまでは cd コマンドで移動しておく。

参考

76. ファイルの文字コードをコマンドで一気に変換 – PHP TIPS:ITpro

文字列一括置換

指定ディレクトリ配下の HTML ファイル内の文字列 charset=shift_jis を charset=UTF-8 に一括変換。

for FILE in `find . -type f -name "*.html" -exec grep -l charset=shift_jis \{\} \;` ; do perl -p -i -e 's/charset=shift_jis/charset=UTF-8/g' $FILE; done

参考

【 sed 】 文字列の置換,行の削除を行う – Linuxコマンド集:ITpro
UNIXコマンドの質問です。 あるディレクトリ以下の、ある拡張子を持つファイルの、特定の文字列を一括で置換できるコマンドはあるでしょうか。 例えば、/usr/local/以下のh.. – 人力検索はてな
ディレクトリ以下の複数ファイルの文字列を一括置換するコマンド – pomo123の日記

文字列検索

ついでに、文字列検索の方法は下記。
ディレクトリ配下のファイル内の文字を検索する。

grep -inr "charset=shift_jis" .

-i : 大文字と小文字の区別をなくす。
-w : 完全一致。
-r : 再帰的に検索。
-h : 複数ファイルを指定した際に、ファイル名を出力しない
-H : 複数ファイルを指定した際に、ファイル名を出力する
-l : パターンに一致した行を含むファイル名だけを出力する
-n : パターンに一致した行のファイル内での行番号を表示する

ファイル名で検索条件をつける(拡張子などを指定する)場合

for FILE in `find . -type f -name "*.html" -exec grep -l charset=shift_jis \{\} \;` ; do grep -inH charset=shift_jis $FILE; done

参考

grepの使い方

トラックバック一覧

この記事にはトラックバックがついていません。

コメント一覧

この記事にはコメントがついていません。

RSS feed for comments on this post.

コメント投稿

Sorry, the comment form is closed at this time.