2016-07-12 6 views
0

ディレクトリ内のすべてのJavaファイルを検索し、検索文字列に一致するすべてのログメッセージを表示する簡単なスクリプトを作成しようとしています。たとえば、Javaファイルの行に「log.info」が含まれている場合、ファイルにスティックしたいと思います。 "error"、 "warn"、 "debug"についても同じことが言えます。今すぐこれは私が持っているものです:引用符で囲まれた文字を無視するgrep

grep -rn --include \*.java "\b\.error\b" * >> log_strings.csv 

私は手動で ".error"を他の文字列の1つに置き換えます。しかし、後で出力を分離しようとすると、grepはフィールド間にコロン ":"文字を追加し、ログメッセージの中には ":"文字も含むので、出力が乱雑になります。交換する方法があり

filename **TAB** line_num **TAB** log.debug("some message **TAB** "+whatever()); 

:大まかに翻訳

filename:line_num:log.debug("some message:"+whatever());

:私はで終わる「は:」私のように、grepのは、文字列ではなくて1を無視生成する文字Javaの文字列は整理されたままです私はsedまたはawkを使ってできることがなければならないと思っています。ループ内でそれを実行することにより、あなたは代替の繰り返しを避けることができ、Perlで

sed 's/:/\t/;s/:/\t/;' 

:あなたは、タブによって最初の二つのコロンを置き換えたい場合は

答えて

1

、2回だけ1つのコロンを交換

perl -pe 's/:/\t/ while ++$x % 3' 
関連する問題