0

Mod_sec ID: [id "31231"] のクォータ間の数値を切り取りたいです。一般的にはまったく難しいことではありませんが、次のような複数のレポートからすべての ID を抽出しようとしている場合:

[Wed Oct 19 15:31:33.460342 2016] [:error] [pid 16526] [client 67.22.202.121] ModSecurity: Access denied with code 400 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS. [file "/usr/local/apache/conf/includes/mod_security2.conf"] [line "4968"] [id "000784"] [hostname "example.org"] [uri "/"] [unique_id "WAfYJU1ol@MAAECO@HQAAAAI"]

[Wed Mar 19 15:31:33.460342 2016] [:error] [pid 16526] [client 67.22.202.121] ModSecurity: Access denied with code 400 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS. [file "/usr/local/apache/conf/includes/mod_security2.conf"] [line "4968"] [id "9"] [hostname "example.org"] [uri "/"] [unique_id "WAfYJU1ol@MAAECO@HQAAAAI"]

[Wed Mar 19 15:31:33.460342 2016] [:error] [pid 16526] [client 67.22.202.121] ModSecurity: Access denied with code 400 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS. [file "/usr/local/apache/conf/includes/mod_security2.conf"] [line "4968"] [id "00263"] [hostname "example.org"] [uri "/"] [unique_id "WAfYJU1ol@MAAECO@HQAAAAI"]

次のようないくつかのコマンドを試しました。

cat asd | awk '/\[id\ "/,/"]/{print}'
cat asd | sed -n '/[id "/,/"]/p'

他にも多くありますが、必要な ID を出力するのではなく、パターンが数回一致するため、追加の出力が含まれています。一般的に、私は次のようなことができます:

cat asd | egrep -o "\"[0-9][0-9][0-9][0-9][0-9][0-9]\""出力を再度カットしますが、ID に 6 つの数字が含まれていない場合、これは機能しません。

awk、sed、egrep のすべてのオプションに精通しているわけではなく、解決策が見つからないようです。

上記の履歴から印刷したいのは次のとおりです。

000784

9

00263

誰か助けてください。前もって感謝します。

4

3 に答える 3

0

awk二重引用符がカスタム セパレータとして使用されている場合、ID は 6 番目のフィールドでアクセスできます。

$ awk -F '"|"' '{print $6}' file
000784
9
00263
于 2016-11-24T18:30:31.247 に答える