我试过

我试过

而不是我连续做 10 次

cat /var/log/nginx/access.log | grep -v download | grep -v danger | grep -v "/visitor/return" | grep -v welcome | grep -v "GET / HTTP" | grep -v "/baby/" | grep -v "/paste/" | awk '{ print $1, $4, $7 }' >> access.$(date "+%Y-%m-%d").txt

有没有办法将它们组合成一个列表或数组,以便更清晰地阅读?


我试过

grep -wv 'download|danger|/visitor/return|welcome|GET / HTTP|/baby/|/paste/' | awk '{ print $1, $4, $7 }' >> access.$(date "+%Y-%m-%d").txt

没有运气,即使-v 仅有的


我认为我在这里是最好的

cat /var/log/nginx/access.log | grep -v -e "download" -e "danger" -e "/visitor/return" -e "welcome" -e "GET / HTTP" -e "/baby/" -e "/paste/" | awk '{ print $1, $4, $7 }' >> access.$(date "+%Y-%m-%d").txt

如果你们知道更好的方法,我愿意向你们学习。!

答案1

您可以使用 -Ev 标志:

grep -Ev 'house|garden' file.txt

将显示所有符合条件的行不是“房子”或“花园”这两个词。

  1. -E:将 PATTERN 解释为扩展正则表达式
  2. -v:反转匹配的方向,以选择不匹配的行。

另一种方法是使用 egrep 的 -v 标志:

egrep -v '(house|garden)' file.txt

相关内容