История изменений
Исправление kostik87, (текущая версия) :
Что-то вроде:
grep -n 'CPU NUMBER: CPA275595\|Hose configuration correctly sent' SRV22_09_0.LOG | tail -n 2 > /tmp/str_pos
FSTR=`sed -n '1p' /tmp/str_pos | cut -f1 -d":"`
LSTR=`sed -n '2p' /tmp/str_pos | cut -f1 -d":"`
sed -n "$FSTR,$LSTRP" SRV22_09_0.LOG
В начале посредством grep выбираем из файла все строки с текстом начальной и конечной строки и сохраняем во временный файл /tmp/str_pos.
Вывод grep будет примерно такой:
100:12.09.2022 16:30:01 KIT: GK7C-3 VERSION: V9.18 CPU NUMBER: CPA275429
120:12.09.2022 16:31:45 Hose configuration correctly sent
Затем в переменные FSTR и LSTR помещаем номера строк, в примере 100 и 120.
Затем посредством sed выбираем из файла строки с номерами с 100 по 120.
Но здесь нужно добавить проверку, что строки «12.09.2022 16:31:45 Hose configuration correctly sent» теоретически может не быть. Поэтому в этом случае в файле /tmp/str_pos номер последней строки будет меньше номера начальной строки.
В этом случае sed выведет только одну строку, с большим номером.
Доработай проверку сам.
и создает новый с новым названием и как-то не айс раз в месяц переделывать команду
Если имя файла формируется по маске SRV22_09_0.LOG, то можешь использовать команду date для формирования маски
date '+SRV%y_%m_0'
FNAME=`date '+SRV%y_%m_0.LOG'`
Используй определение переменной с именем входного файла.
Исправление kostik87, :
Что-то вроде:
grep -n 'CPU NUMBER\: CPA275595\|Hose configuration correctly sent' SRV22_09_0.LOG | tail -n 2 > /tmp/str_pos
FSTR=`sed -n '1p' /tmp/str_pos | cut -f1 -d":"`
LSTR=`sed -n '2p' /tmp/str_pos | cut -f1 -d":"`
sed -n "$FSTR,$LSTRP" SRV22_09_0.LOG
В начале посредством grep выбираем из файла все строки с текстом начальной и конечной строки и сохраняем во временный файл /tmp/str_pos.
Вывод grep будет примерно такой:
100:12.09.2022 16:30:01 KIT: GK7C-3 VERSION: V9.18 CPU NUMBER: CPA275429
120:12.09.2022 16:31:45 Hose configuration correctly sent
Затем в переменные FSTR и LSTR помещаем номера строк, в примере 100 и 120.
Затем посредством sed выбираем из файла строки с номерами с 100 по 120.
Но здесь нужно добавить проверку, что строки «12.09.2022 16:31:45 Hose configuration correctly sent» теоретически может не быть. Поэтому в этом случае в файле /tmp/str_pos номер последней строки будет меньше номера начальной строки.
В этом случае sed выведет только одну строку, с большим номером.
Доработай проверку сам.
и создает новый с новым названием и как-то не айс раз в месяц переделывать команду
Если имя файла формируется по маске SRV22_09_0.LOG, то можешь использовать команду date для формирования маски
date '+SRV%y_%m_0'
FNAME=`date '+SRV%y_%m_0.LOG'`
Используй определение переменной с именем входного файла.
Исходная версия kostik87, :
Что-то вроде:
grep -n 'CPU NUMBER\: CPA275595\|Hose configuration correctly sent' SRV22_09_0.LOG | tail -n 2 > /tmp/str_pos
FSTR=`sed -n '1p' /tmp/str_pos | cut -f1 -d":"`
LSTR=`sed -n '2p' /tmp/str_pos | cut -f1 -d":"`
sed -n "$FSTR,$LSTRP" SRV22_09_0.LOG
В начале посредством grep выбираем из файла все строки с текстом начальной и конечной строки и сохраняем во временный файл /tmp/str_pos.
Вывод grep будет примерно такой:
100:12.09.2022 16:30:01 KIT: GK7C-3 VERSION: V9.18 CPU NUMBER: CPA275429
120:12.09.2022 16:31:45 Hose configuration correctly sent
Затем в переменные FSTR и LSTR помещаем номера строк, в примере 100 и 120.
Затем посредством sed выбираем из файла строки с номерами с 100 по 120.
Но здесь нужно добавить проверку, что строки «12.09.2022 16:31:45 Hose configuration correctly sent» теоретически может не быть. Поэтому в этом случае в файле /tmp/str_pos номер последней строки будет меньше номера начальной строки.
В этом случае sed выведет только одну строку, с большим номером.
Доработай проверку сам.
и создает новый с новым названием и как-то не айс раз в месяц переделывать команду
Если имя файла формируется по маске SRV22_09_0.LOG, то можешь использовать команду date для формирования маски
date '+SRV%y_%m_0'
FNAME=`date '+SRV%y_%m_0.LOG'`
Используй определение переменной с именем входного файла.