• ベストアンサー

grepでの日本語検索

現在、 grep '2004-10-1' test.log | grep -c '日本語' というように日付と単語の両方がある行数を取り出す処理を行っています。 grepでは日本語は対応していないとありましたが、このように日本語でも行数を取得できるようなコマンドがありましたら、ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • iichiho
  • ベストアンサー率37% (416/1114)
回答No.2

Linuxのバージョンとgrepのバージョン、シェルの種類が記載されていないので断言出来ませんが、読み込むtest.logの漢字コードがEUCだったら問題なくできると思います。 もし、test.logの感じコードgeucでないのなら、下記のコマンドを利用します。 % nkf -e -Lu test.log | grep '2004-10-1' |grep -c "日本語"

aiurai54
質問者

お礼

ありがとうございます。無事に取得することができました。とってもうれしいです。

その他の回答 (1)

  • interplay
  • ベストアンサー率39% (108/273)
回答No.1

ご質問を見ながらRedHatEnterpriseLinuxAS2.1上で上記コマンドライン試しましたが普通に出来ますよ。。 grepはrpmでgrep-2.4.2-7です。 システムそのものの文字コード設定がUTF-8とかになっていませんか?(FedoraCore3とかはEUCにしないと/UTF-8対応Terminalを使うとか) 見当違いだったら済みません。

aiurai54
質問者

お礼

ありがとうございます。

関連するQ&A

  • SJISファイルを日本語でgrep

    UNIX環境で、 SJISファイルを日本語でgrepしたのですが、 ファイル名が出力されずにうまくいきません。 どなたかご教授願えないでしょうか。 [自分のコマンド] find ./ -type f -print | xargs nkf -e | grep 'テスト' とし、日本語は検地できたのですが、 ファイル名が出力されずに困っております。 grep -l としたら、↓のエラーが表示されました。 xargs: nkf: シグナル 13 によって終了しました サブディレクトリも含めて検地したいのですが、 なにかいい方法ありますでしょうか。

  • 複数の文字列を検索

    あるログファイルの文字列を取得して。検索でヒットした文字列行 を返すスクリプトを作成しております。 検索:"OK"    日付 対象行 : OK! Tue Jul 19 文字列"OK"は普通に # grep "OK" ログファイルPath で検索できますが、 文字列と日付を両方引っ掛ける場合は・・・ grep -e "OK" -e env LANG=c date -u +"%a %b $d" ログファイルPath 当然コマンドエラーになります。 dateコマンドから日付を取得して、grepにて引っ掛ける方法を知りたいので すが、お分かりになる方、ご教授お願い致します。

  • grepコマンドでの文字列検索

    grepコマンドについて質問です。 grepコマンドでCSVファイルを参照し、ある項目に特定の文字列でないものがあれば、そのファイル名を取得する処理をしたいと思っています。 つまり、ある項目を$strとすると $str <> 'aaaaaa' という処理をgrepで行おうと考えています。 現状では、 grep -l '^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^(aaaaaa)]' ファイル名 等を試していますが、[^(aaaaaa)]だと一文字目しか判別できていないようです。[^a{6}]などもうまくいきません。 何かいい方法があれば教えて頂きたいと思います。 宜しくお願いします。

  • grepで日付指定してlogを取り出したい

    あるアカウントの maillog を、日付指定して取り出したいんだけど、 以下に何を付け足したりすればいいかわかりません。 そもそも(パイプで?)付け足せば済むことなのかもわかりませんし。。。 grep imap /var/log/maillog | grep アカウント 日付の正しい記述も判らないです。 正しいコマンドや便利な抽出方法があれば教えていただけますでしょうか。

  • grep と gawk

    たとえば圧縮ファイルを解凍して 必要のない行を排除して解凍後ファイルを作成する場合 (1)gunzip -c test.gz | gawk '!/\.txt*/' > test.txt (2)gunzip -c test.gz | grep -v '.txt' > test.txt 上記のコマンドではどちらが処理的にはやいのでしょうか? 自分で試すと(2)の方がはやかったです。 イメージ的にはgawkなんですけど・・・ 一般論とかあるんでしょうか?

  • 出力のリダイレクトコマンド「>」で 日本語をリダイレクトする方法?

    Redhat Linux 9の環境で、「ls」、「less」のコマンドで日本語ファイル名をうまく表示しましたが、「>」で日本語をリダイレクトすることはなかなかできなかった。 下記のコマンドを試したら、、バイナリファイルになったらしいです。 echo "日本語" > test.log 誰かご教授いただければ、大変助かります。 よろしくお願いします。

  • 正規表現で15日以前のlogをgrep -vしたい(シェルはbash)

    通信機器が吐き出すlogファイルを不要な日付をgrep -vして チェックしたいと思っております。 grep対象logファイルには「Jul 29 22:20:28」この形式で日付が 各行ごとに含まれて降ります。 grep -vしたい日付は、1日~15日までの日付となるのですが、 自分なりに調べ、以下のように実行しました。 ■最初に実行したgrep -v grep -v "Jul\ \ [0-9]" hoge.log | grep -v "Jul\ [0-1][0-5]" > [logfile] 次に興味本位で以下のように実行したところ、 ■2回目に実行したgrep -v grep -v "Jul\ [0-9]" hoge.log | grep -v "Jul\ [0-9][0-5]" > [logfile2] 私としては、2回目に実行したgrep -vでは20日~29日までと 30日~31日までの日付は除去されると想定していたのですが、 実行したところ、20日~29日までと30日~31日までの日付が しっかりと含まれておりました。 これが何故なのかまったく検討がつかないため、 こちらに質問させていただきました。 どなたかおわかりになるかたおられましたら、 アドバイス・ご教授よろしくお願いします。

  • 連続で複数の単語をGREPしたい

    Windows7端末でサクラエディタを用いてGrepしていますが、Grepしたい単語数が多いので困っています。イメージとしては以下のようにできれば良いと考えています。 ・検索したい単語のリスト C:\単語リスト.txt ・結果を出力するファイル C:\結果テキスト.txt(結果ファイルは単語ごとに出力しても可能) ・検索対象フォルダ(サブフォルダも検索) C:\SourceCode\ 単語リストから一行ずつ取得して検索対象フォルダから該当のファイル名と該当行を結果テキスト.txtに出力します。結果は一つのファイルにまとめて出す場合は、単語ごとにGrepした結果を分けて出力したいです。 もしくは単語単位に複数の結果テキスト.txtを出力しても構いません。 方法ご存知のかた教えて頂ければ幸いです。

  • grep,sedコマンドについて

    昨日に引き続き、またまた質問です。 昨日回答してくださった方、ありがとうございました。 その後自分でも色々勉強しまして、ファイルの中身を処理するにはgrepコマンドとsedコマンドが 有効である事が分かりました。 今回やりたいことは以下のファイルの数字と時間の部分(//のついている2行)の削除です //1 //00:00:03,600 --> 00:00:07,195 xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx //2 //00:00:07,360 --> 00:00:09,635 xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx     ・     ・ (実際のファイルには"//"はついていません) 理想の出力 xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx (xxxxxの部分には英語の台詞が入ります) で、以下が自分が考えた方法です 1.sedコマンドのみで削除 $ sed "/[0-9]*\n[0-9][0-9].*/d" ファイル名 結果 ファイルの内容がすべて表示されるだけ (a) 2.grepコマンドで抽出しパイプ処理 まずgrepで削除部分を抽出 $ grep -P "^[0-9]*\n[0-9][0-9].*" ファイル名 結果 1    00:00:03,600 --> 00:00:07,195    2    00:00:07,360 --> 00:00:09,635         ・         ・    10    11         ・         ・ となり、1~9までの数字と時間はちゃんと表示され 10以降は数字しか出ません。 (b) また -P の部分を -E にすると、何も表示されません (c) (perlの正規表現と拡張正規表現の違いはここでは無いように思えますが・・・) 2は最初でつまづいたのでどのコマンドに渡して行を削除するかはまだ分かりません (d) 削除の際、2行まとめて行うのは、一行ずつ行うと、台詞の部分に数字のみが入っていた場合 削除されるのを防ぐためです 以上長くなりましたが(a)~(d)の質問、疑問に回答していただけると嬉しいです。 よろしくお願いします。

  • プロパティファイルで日本語を扱う

    プロパティファイルに日本語をいくつか定義しておきます。(例えばmessage=あいうえお など)これをResourceBundleでgetStringして表示すると、文字化けしてしまいます。コマンドプロンプトからプロパティファイルをUnicodeエスケープすれば、文字化けしないで表示できるのですが、プログラム上でUnicodeエスケープとかってできるのでしょうか?それともプロパティファイルで日本語を取得する場合は必ずコマンドプロンプトからUnicodeエスケープするしかないのでしょうか?また、他にプロパティファイルでの日本語の取得の仕方がありましたらご教授願います。

    • ベストアンサー
    • Java