このスレッドは未解決です(解決したらこちらで解決済にしてください)
<<戻る

grepでハング このメッセージに返信する
日時: 2013/04/24(Wed) 10:08
名前: ごとう
URL:
LANGと違う文字コードでgrepするとハングします。
現象は CentOS6.3 + grep 2.6.3 + LANG=ja_JP.utf8の組み合わせで再現します。
LANG=Cにしたり、CentOS5.6 + grep 2.5.1の環境では再現しませんでした。

どなたか良い解決方法をご存じないでしょうか。

以下、環境と再現方法です。

--

# cat /etc/redhat-release
CentOS release 6.3 (Final)

# uname -a
kernel: Linux local 2.6.32-279.19.1.el6.x86_64 #1 SMP Wed Dec 19 07:05:20 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

# grep -V
GNU grep 2.6.3

# env | grep LANG
LANG=ja_JP.utf8

### sjis.txt 、 do_grep.sh ともにsjis+改行コードLFです。
### do_grep.sh には実行属性がついてます。

# ls -l
-rwxr-xr-x 1 root root 36 4月 23 19:31 2013 do_grep.sh
-rw-r--r-- 1 root root 21 4月 23 19:25 2013 sjis.txt

# nkf --guess sjis.txt
Shift_JIS

# cat sjis.txt | nkf --utf8
あああ
いいい
ううう

# nkf --guess do_grep.sh
Shift_JIS

# cat do_grep.sh | nkf --utf8
#!/bin/sh
grep -F 'あ' 'sjis.txt'

# ./do_grep.sh
(無応答。別コンソールでtopをみるとCPU 100%で張り付いている。ctrl+cで中断するしかない。)
記事編集 編集
Re: grepでハング このメッセージに返信する
日時: 2013/04/24(Wed) 11:45
名前: stranger
URL: http://ja.528p.com/
sjis.txtをutf8に変換してからutf8で検索したのでは都合がわるいですか

nkf -w sjis.txt | grep "あ"
記事編集 編集
Re: grepでハング このメッセージに返信する
日時: 2013/04/24(Wed) 12:12
名前: ごとう
URL:
stranger様
返信ありがとうございます。

そのようにすれば出来るのはわかっているのですが
既存で動いているシステムのリプレイスなので
データや処理等には極力手を入れたくないというのが正直なところです。

現状はgrepに何らかのパッチを当てるか
ダウングレードしてみるかあたりを検討しております。
記事編集 編集
Re: grepでハング このメッセージに返信する
日時: 2013/04/24(Wed) 13:26
名前: stranger
URL: http://ja.528p.com/
do_grep.sh

#!/bin/bash
LANG=ja_JP.SIFT_JIS
grep -F "あ" sjis.txt | nkf -w

一時的にLANGをsjisに指定して検索し、utf-8で出力
utf-8で出力しなければ文字化け

nkf -w sjis.txt | grep -F "あ"

utf-8で出力してutf-8で検索
sjis.txtそのものを変更するわけではない
記事編集 編集
件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

※質問を投稿後に自己解決された場合は、原因と行った対処を具体的に書き込み下さるよう、よろしくお願いします。

- WEB PATIO -