web-dev-qa-db-fra.com

Utiliser Grep pour obtenir des entrées spécifiques et ignorer les autres

existe-t-il un moyen d'utiliser grep pour ignorer les lignes avec 141.8. .. contenues dans eux MAIS obtenir des lignes qui ont GET? En ce moment, j'ai ceci mais je dois faire quelque chose de mal

Sudo grep -v '^141.8.83.213' && "GET" /home/tsec/prototype/logs/glastopf.log | sort -k4,4 | tac | sort -uk4,4 | sort -k1,2 | tail -n 10 > /home/tsec/prototype/logs/ext$

C'est ce que contient le journal

2016-04-20 13:30:59,818 (glastopf.glastopf) 141.8.83.213 requested GET /favicon.ico on e1f841a092e9:80
2016-04-20 13:31:01,817 (glastopf.glastopf) 141.8.83.213 requested POST /index on e1f841a092e9:80
2016-04-20 13:31:01,855 (glastopf.glastopf) 141.8.83.213 requested GET /style.css on e1f841a092e9:80
2016-04-20 13:31:01,883 (glastopf.glastopf) 141.8.83.213 requested GET /favicon.ico on e1f841a092e9:80
2016-04-20 16:39:55,713 (glastopf.glastopf) Initializing Glastopf 3.1.3-dev using "/data/glastopf" as work directory.
2016-04-20 16:39:55,797 (glastopf.glastopf) Connecting to main database with: sqlite:///db/glastopf.db
2016-04-20 16:39:55,834 (glastopf.glastopf) Glastopf started and privileges dropped.
2016-04-20 17:54:33,857 (glastopf.glastopf) 62.210.252.43 requested GET / on de96c7b4104d:80
2016-04-20 17:54:34,101 (glastopf.glastopf) 62.210.252.43 requested GET /HNAP1/ on de96c7b4104d:80
2016-04-20 22:06:20,265 (glastopf.glastopf) Initializing Glastopf 3.1.3-dev using "/data/glastopf" as work directory.
2016-04-20 22:06:20,399 (glastopf.glastopf) Connecting to main database with: sqlite:///db/glastopf.db
2016-04-20 22:06:20,446 (glastopf.glastopf) Glastopf started and privileges dropped.
2016-04-20 22:33:23,136 (glastopf.glastopf) 74.91.23.109 requested GET / on 11bbb1d43c02:80

Donc à la fin, je veux obtenir les entrées qui ont GET dans la chaîne mais ignorer celles qui ont l'IP 141.8.83.213

1
firepro20

Utilisez deux greps:

_grep "GET" /home/tsec/prototype/logs/glastopf.log |  grep -vF 141.8.83.213 | ...
_

De man grep :

_-F    Match using fixed strings. Treat each  pattern  specified  as  a
      string  instead  of  a  regular  expression.  If  an  input line
      contains any of the patterns as a contiguous sequence of  bytes,
      the line shall be matched. A null string shall match every line.

-v    Select  lines not matching any of the specified patterns. If the
      -v option is not specified, selected lines shall be  those  that
      match any of the specified patterns.
_

Donc _-F_ nous permet d’éviter d’échapper à _._, qui correspondrait à n’importe quel caractère. _-v_ est le moyen classique de dire à grep d’inverser la correspondance.

2
muru

Awk autorise les opérateurs logiques dans regex, vous pouvez donc dire faire correspondre GET et aussi les lignes qui ne contiennent pas ip

  awk '/GET/&&!/141\.8\.83\.213/' log. txt
2

Grep unique,

grep -P '^(?!.*?141\.8\.83\.213).*\bGET\b' file

DÉMO

1
Avinash Raj