У меня вопрос относительно использования более продвинутых grep, awk, sed. У меня есть файл журнала для проприетарного MTA, который содержит IP-адреса в строке, разделенные [redacted]^~x.x.x.x^[redacted]
. Пока все мои гадания, бодрствования и седины не очень меня продвинули.
В этом файле журнала 331520 строк. Моя цель состояла в том, чтобы просто найти IP-адреса, а затем выполнить цикл for с помощью sed, чтобы sed 's / $ i / redhibited'. Я включаю образец одной из записей журнала. Если вы все знаете, я был бы очень признателен.
Jun 4 15:21:52 host.name mta-name: 13388^~88/CC-04671-FCA0DCF4^~D^~<redactedmessageid>^~@^~redacteduser@domain.tld^~redacted.hostname^~000.00.000.000^~port^~esmtp^~^~external_routing_nobounce^~0^~0.51^~subjectofmessage^~250 2.6.0 <redactedmessageid> [InternalId=2178458] Queued mail for delivery
Вы хотите заменить IP-адреса строкой «[отредактировано]»? Нет необходимости grep
затем sed
в петле. sed
дает вам цикл и "grepping" бесплатно.
sed 's/\^~[[:digit:]]\+\(\.[[:digit:]]\+\)\{3\}/^~[redacted]^~/' logfile
Я понял это. Больше страниц руководства. Небольшая доработка моего grep
команда с -o
показал мне список адресов с sort | uniq
, Мне удалось получить список
grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' log.file | sort -n | uniq