nkfした後のgrepが意味わからんすぎてムシャムシャして食べた
linux環境でsjisファイルにgrep(日本語)検索しようとして全く謎挙動だったから食べた。
食べられなかった。
<コマンドだけほしい用>
単発式
# ファイルの文字コードを合わせる場合 nkf -Sw sample.sjis | grep "あああ" nkf -[入力オプション][出力オプション] [対象ファイル] | grep [検索文字] # 検索文字の文字コードを合わせる場合 grep `echo "あああ" | nkf -Ws` sample.sjis
find活用grep式
find ./ -type f | xargs -I {} nkf -Sw {} | grep -n "漢字"
入力オプションにファイルの文字コード、出力コードにgrepに使われる検索をつかう。
つまずきポイント
・入力と出力の両方のオプションがある。ここの指定をミスってるとうまく行かない。
・grepは文字コードがシステムに依存している。らしい。echo $LANGで使ってる文字コードを調べる。
・findでのパイプ経由がくせもの
grep -a `echo "あああ" | nkf -Ws` sample.sjis
これでもいい。入力のguess(デフォルト)を信じないところが重要だとおもっている。
わかってるなら指定しておいたほうが無難。
find ./ -type f | nkf -Sw | grep -n "漢字"
これはうごかない。findの結果を渡してしまうのでファイルとしてではなくて単純に文字列としてnkfしてるっぽい。
やってみたけどよくわかりません。よくわかりませんがnkfにIN/OUTのオプションがあるのがわかったので、良しとします。
<参考にさせていただきました>
atmarkit.itmedia.co.jp
sysfrontier.com
qiita.com