【问题标题】:Linux remove lines contain certain ip addresses from log file (66.249)Linux 删除行包含日志文件中的某些 IP 地址 (66.249)
【发布时间】:2017-12-03 23:20:36
【问题描述】:

我有一个 6gb 的 httpd 日志文件,我想删除以 66.249(googlebot 的 IP 块)我确实有一个

SetEnvIf Remote_Addr "66\.249\.\." dontlog

我的 httpd.conf 文件中的条目,但它似乎没有工作

那么有没有类似的linux命令

grep -removelines-starting "66.49"  acessslog

【问题讨论】:

  • 您好,如果以下任何答案对您有所帮助,请在答案旁边勾选正确的符号以接受答案。您还可以投票支持提供多种方法来解决同一问题的其他人。
  • 为了避免将来记录这些行,首先将正则表达式更改为 SetEnvIf Remote_Addr "66\.249\.[0-9]+\.[0-9]+" dontlog 并确保 CustomLog 看起来像这样:CustomLog /var/log/apache2/access_log combined env=!dontlog(添加 env=!dontlog 到最后)

标签: apache grep httpd.conf googlebot


【解决方案1】:

使用sed:如果您直接在文件中进行更改,请使用-i 标志。

sed  '/^66\.49/d' logfile  

使用grep:这将打印除以 66.49 开头的行之外的行

grep -v '^66\.49' logfile  

使用awk:这将打印除以66.49开头的行之外的行

awk '!/^66\.49/' logfile   

【讨论】:

    【解决方案2】:

    我可以想象 sed 更适合这项任务。

    sed -i '/66\.249/d' ./acessslog
    

    "d" 用于删除匹配的模式,而-i 用于覆盖输入文件。

    【讨论】:

    • 这也将删除以661249663249 .... 开头的行。 Reson:. 代表正则表达式中的任何字符。
    • @PS。你是对的,编辑了我的答案!必须小心。
    • 您应该将 IP 固定在行首,以避免在中间某处意外包含该模式的行。使用模式:'^66\.249/d'。当然,除非 IP 不在行首。
    猜你喜欢
    • 2021-05-25
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2019-01-06
    • 2011-09-27
    • 2012-10-12
    相关资源
    最近更新 更多