Получить серию журналов между диапазонами дат, когда диапазон содержит определенную строку (s)

Учитывая ваш исходный тег CentOS, я предполагаю, что у вас есть /etc/profile.d/vim.shфайл, который устанавливает псевдоним:

alias vi >/dev/null 2>&1 || alias vi=vim

Если вы хотите запускать viпри вводе vim, я предлагаю добавить к вашему собственному~/.bashrc:

unalias vi
alias vim=vi
0
08.07.2020, 09:50
2 ответа

Просто небольшое изменение в вашей команде sed

sed -n '/2020\/07\/05 21:10:28\.010/,/2020\/07\/05 21:10:30\.668/{;p};/2020\/07\/05 21:10:30\.668/,/\*\*\*/{;p}'

Вашей команде просто нужно было сбежать. поставив перед ним обратную косую черту. т. е. 05.07.2020 21 :10 :28\.010

0
18.03.2021, 23:21

Это несколько многословно, потому что:

.. Он предоставляет переменные соответствующим образом для того, чтобы сделать их аргументами для скрипта, предполагая, что это не единичный -промах.

... Читается и адаптируется.

.. Он показывает весь блок для записи журнала, от метки времени до следующей строки, состоящей из всех звездочек.

#! /bin/bash

Low='2020/07/05 21:10:28'
End='2020/07/05 21:10:43'

AWK='
BEGIN { 
    reTS = "[[]20../../....:..:..[.]...[]]";
    reStop = "^[*]+$";
}
function Range (ts) {
    return ((ts < Low || ts > End) ? "N" : "Y");
}
match ($0, reTS) { Block = Range( substr ($0, RSTART+1, RLENGTH-6)); }
Block == "Y" { print; }
$0 ~ reStop { Block = "N"; }
'
    awk -v Low="${Low}" -v End="${End}" "${AWK}" myLog.txt
1
18.03.2021, 23:21

Теги

Похожие вопросы