我正在尋找一個可用於掃描標準 apache 日誌檔案中的 HTTP 錯誤的正規表示式。
我對匹配所有行很感興趣不具有 HTTP 200 或 HTTP 204 返回狀態。
我可以匹配的線做包含 HTTP 204 或 HTTP 200 回傳代碼
grep 'HTTP[^"]*" 204 \| HTTP[^"]*" 200'
但我想要相反的。我也確信上面的表達式可以優化。
我需要將這樣的正規表示式提供給外部程序,因此grep -v
不能使用它來反轉它。
答案1
普通正則表達式不包括否定單個字元之外的任何內容的方法,因此我認為您必須提供所需的完整程式碼清單:
HTTP[^"]*" (1|20[12356]|3|4|5)
Perl 相容的 RE 確實允許您否定文字字串,因此如果您正在使用那些您可以使用
HTTP[^"]*" (?!(200|204))
答案2
此-v
開關為您提供所有不匹配的行,因此:
egrep -v 'HTTP[^"]*" (200|204)'