2

アプリケーションによって生成されたログ ファイルを調べるシェル スクリプトを作成します。生成されたログから関数名と呼び出しに関する最小限の情報のみを分離する必要があります。

ログファイルのフォーマットは - 0.0003 636488 +440 -> include_once(/var/www/public/const.php) /var/www/public/ajax_shop.php:2

さて、そのような行から、ファイル「ajax_shop.php」の「2」行目で「include_once」が呼び出されたことを抽出したいと思います。

この状況では、シェルスクリプトで正規表現をどのように使用すればよいですか?

4

1 に答える 1

3

sed を使用した 1 つの方法:

sed 's/.*-> \([^(]*\).*:\(.*\)/\1 was called at line \2/' logfile
include_once was called at line 2.

\([^(]*\) => これは閉じ括弧が現れるまで一致します. [^(]* => '(' ではない一連の文字を意味します.

awk の使用:

$ awk -F"[>(:]" '{print $2 " was called at line " $NF}' logfile
 include_once was called at line 2.

awk は複数の区切り文字 >,( および : を使用します。これを使用すると、2 番目のフィールドと最後のフィールドを出力するだけで簡単になります。

于 2012-12-04T11:34:10.237 に答える