将文件路径名和 grep 值排除到文本文件中

将文件路径名和 grep 值排除到文本文件中

我想在访问日志中 grep 我的网络服务器上的“404”页面,尝试了以下命令,

grep -irn "404" /var/log/httpd/www.abc.com.access_log > abc-404.txt

现在我想要相同的文本文件,没有ema8ketpl4ace9dmin给定路径的名称。这意味着不想要这些路径。

我已经尝试过 --exclude 选项无法正常工作。

grep --exclude=ema8ketpl4ace9dmin > abc-404.txt

它只给我空文本文件。

答案1

你可以尝试grep像这样涉及第二个:

grep -irn "404" /var/log/httpd/www.abc.com.access_log|grep -v ema8ketpl4ace9dmin  > abc-404.txt

答案2

我不确定您为什么使用该-r选项(至少在第一个示例中),因为您grep仅将调用应用于一个文件。

对于第二个问题,我建议使用awk而不是grep

awk '$0 ~ /404/ && $0 !~ /ema8ketpl4ace9dmin/ {print}' /var/log/httpd/www.abc.com.access_log > abc-404.txt

这将指示awk打印出现表达式“404”的所有行,但是不是( !~) 表达式“ema8ketpl4ace9dmin”。

请注意,“打印”是规则适用的任何行的标准操作,因此您实际上可以省略它并简单地说

awk '$0 ~ /404/ && $0 !~ /ema8ketpl4ace9dmin/' /var/log/httpd/www.abc.com.access_log > abc-404.txt

相关内容