而不是我连续做 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
将显示所有符合条件的行不是“房子”或“花园”这两个词。
- -E:将 PATTERN 解释为扩展正则表达式
- -v:反转匹配的方向,以选择不匹配的行。
另一种方法是使用 egrep 的 -v 标志:
egrep -v '(house|garden)' file.txt