Использование sed, чтобы вырезать файл журнала

Я следую за файлом журнала и использую grep, чтобы вырезать только те строки, для которых мне нужна информация, теперь я хочу передать это в sed, чтобы обрезать жир как таковой.

Например, оригинальный журнал:

Feb  9 17:48:21 dnsmasq[884]: query[A] captive.g.aaplimg.com from 192.168.178.21
Feb  9 17:48:21 dnsmasq[884]: forwarded captive.g.aaplimg.com to 8.8.4.4
Feb  9 17:48:21 dnsmasq[884]: reply captive.g.aaplimg.com is 17.253.55.202
Feb  9 17:48:21 dnsmasq[884]: reply captive.g.aaplimg.com is 17.253.55.204

Затем я использую grep --line-buffered "query", чтобы получить только строки запроса:

Feb  9 18:42:21 dnsmasq[884]: query[A] captive.g.aaplimg.com from 192.168.178.21
Feb  9 18:42:40 dnsmasq[884]: query[A] sb.scorecardresearch.com from 192.168.178.21
Feb  9 18:42:51 dnsmasq[884]: query[A] captive.g.aaplimg.com from 192.168.178.21
Feb  9 18:43:06 dnsmasq[884]: query[A] captive-cidr.origin-apple.com.akadns.net from 192.168.178.21
Feb  9 18:43:06 dnsmasq[884]: query[AAAA] captive-cidr.origin-apple.com.akadns.net from 192.168.178.21
Feb  9 18:43:21 dnsmasq[884]: query[A] time-macos.apple.com from 192.168.178.21

Теперь у меня есть команда:

sudo tail -F /var/log/pihole.log  | grep --line-buffered "query" | sed -E 's/(query).*(from)/1 2/'

Потому что я хочу вырезать элементы, так что идет к:

18:42 captive.g.aaplimg.com
18:42 sb.scorecardresearch.com
18:42 captive.g.aaplimg.com
18:43 captive-cidr.origin.apple.com 

и так далее.

Куда я иду не так?

Всего 1 ответ


Следующая команда извлекает информацию, которую вы хотите (часы, минуты и то, что находится между query и from , как вы описываете с помощью своих последних 4 строк кода) из 6 строк, которые вы описываете как вывод grep .

sed -E 's/.*([0-9]{2}:[0-9]{2}):.*query[[^]]*] (.*) from .*/1 2/'

Есть идеи?

10000