Bash - Извлечение только даты и времени из строковой переменной с исключением другого окружающего текста - PullRequest
0 голосов
/ 16 июня 2020

Я новичок в sed и в данном случае пытаюсь использовать его безуспешно.

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

пример строки переменной:

jcl / jclnt.log- [05.06.20 16: 42: 52.964]: jclnt ST:

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

Я пробовал что-то вроде этого: priordate = echo "$ Prior "| awk -F '[] []' '{print $ 2}'

Но это не сработало.

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Это должно сработать, если вы удалите пробел перед echo.

echo "jcl/jclnt.log-[05/06/20 16:42:52.964]:jclnt ST:" | awk -F'[][]' '{print $2}'
05/06/20 16:42:52.964

, а затем сделаете оператор следующим образом: priordate=$(echo ...)

0 голосов
/ 16 июня 2020

Вы можете использовать собственное сопоставление регулярных выражений Bash. Это быстрое и грязное регулярное выражение, которое просто захватывает все, что находится между [ и ]. Вы, конечно, можете сделать его более конкретным c, если необходимо.

#!/bin/bash

s="jcl/jclnt.log-[05/06/20 16:42:52.964]:jclnt ST:"
pattern="\[(.*)\]"

if [[ "${s}" =~ $pattern ]]
then
        date_time="${BASH_REMATCH[1]}"
fi

echo "${date_time}"

Вывод:

05/06/20 16:42:52.964
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...