2

Tomcat アプリケーションを開発していますが、ログを表示するときに特定のものを検索して強調表示できるようにしたいと考えています。パラメータ(正規表現)を入力として取り、一致する文字列を強調表示するエイリアスのようなものが必要です。

これまでのところ、私はこれが機能すると考えましたが、何か新しいものが必要になるたびにその小さな部分を変更する必要があるほど実用的ではありません:

tail -n 100 -f /opt/apache-tomcat-6.0.26/logs/catalina.out | perl -pe 's/null/\e[1;31m$&\e[0m/g'

これは私がうまくいくと思ったものです:

logColor(){
  x="'s/"
  y="/\e[1;31m$&\e[0m/g'"
  tail -n 100 -f /opt/apache-tomcat-6.0.26/logs/catalina.out | perl -pe $x$1$y
}
alias logC=logColor

これが2つの同じ行を出力することをテストしました:

logColorTest(){
  x="'s/"
  y="/\e[1;31m$&\e[0m/g'"
  echo $x$1$y
  echo "'s/null/\e[1;31m$&\e[0m/g'"
}
alias logCT=logColorTest
logCT null

したがって、これが機能しない理由がわかりません。これがどのように機能するかを知っている人からの入力に感謝します:)

4

2 に答える 2

5

問題grepは、一致する行のみが取得され、他の行が除外されることです。(それgrepはとにかく行うべきことです。)しかし、多くの場合、すべての出力が必要ですが、一部の特定の文字列が強調表示されています。

.bashrcこのような要件のために、この小さなbash関数を持っています:

mark () 
{ 
    local searchExpr=${1/\//\\\/};
    sed "s/$searchExpr/"`echo -n -e "\e[91;1m"`'&'`echo -n -e "\e[0m"`'/gi' $2
}

使用法:

command | mark some_string # OR
mark some_string some_file

必要に応じて、適切な関数名に名前を変更します。

注: という優れたコマンドがありhighlightます。したがって、それを関数名として使用できませんでした。

于 2013-10-11T08:39:31.750 に答える
5

@fedorquiが指摘したように、grepこれを行うために使用できます:

grep --colour 'null\|$'

これは一致し、ハイライトnullまたは行の終わりになります。つまり、すべての行が表示されます。

環境変数を使用すると、GREP_COLORSさまざまな部分がどのように強調表示されるかを制御できます。たとえば、一致したテキストを黄色でマークします。

export GREP_COLORS='ms=1;33'
于 2013-10-11T08:44:18.977 に答える