вырезать только дату и время из заданной входной строки – входной строкой является Cpmplete sting, например 05-09-2018-10.13

вырезать только дату и время (т.е. 05-09-2018-10.13 ) из строки ниже

/pi_nfs/pixin/axpin-zhgahh/was_logs/was_admin_logs/start_WPS.log.05- 09-2018-10.13:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember stop completed. /pm_nfs/pmfin/axpin-zhgahh/was_logs/was_admin_logs/start_WPS.log.05- 09-2018-23.00:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember stop completed. 

Я пробовал комбинацию ниже, но она возвращает меня

Команда:

 zgrep -i "AppClusterMember stop completed" /pi_nfs/pixin/axpin zhgahh/was_logs/was_admin_logs/start_WPS.log.05-09-2018*|cut -d '.' -f3 

Выход:

 05-09-2018-10.13:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember stop completed 05-09-2018-23.00:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember stop completed 

Ожидаемый результат:

 05-09-2018-10.13 05-09-2018-23.00 

    Ответ

     grep -Eo "[0-9]{2}-[0-9]{2}-[0-9]{1,4}-[0-9]{2}\.[0-9]{2}" file 

    объяснение

    Флаги:

    -E – использовать расширенное регулярное выражение. (Разрешить использование некоторых символов в регулярных выражениях без их выхода.)

    -o – печатать только соответствующий вывод.

    Regex:

    [0-9] – сопоставить символ, если это цифра от 0 9 .

    [0-9]{x} – Совпадение x последовательных символов, если они являются цифрами 09 .

    [0-9]{x,y} – сопоставить не менее x последовательных символов, если они представляют собой цифры [0-9]{x,y} но если их больше, сопоставьте не более y из них.

    Не имеет особого значения, grep будет пытаться соответствовать точному символу.

    . Означает any character поэтому он должен быть экранирован \ для обозначения точного символа . ,

    Ответ на дополнительный запрос в комментариях к вопросу

     zgrep -Po "[0-9]{2}-[0-9]{2}-[0-9]{1,4}-[0-9]{2}\.[0-9]{2}(?=.*stop completed\.)" file.gz 

    объяснение

    Из руководства zgrep :

    Zgrep вызывает grep для сжатых или сжатых файлов.
    Все указанные параметры передаются непосредственно в grep.

    Поэтому я объясню только недавно добавленные части флагов и регулярных выражений.

    Флаги:

    -P – использовать регулярное выражение Perl. (Позволяет смотреть вперед)

    Regex:

    (?=.*stop completed\.) – Часть регулярного выражения из (?= to ) называется Positive look-ahead .
    В этом случае он соответствует предыдущему регулярному выражению, только если строка содержит stop completed. после этого.

     echo "/pi_nfs/pixin/axpin-zhgahh/was_logs/was_admin_logs/start_WPS.log.05-09-2018-10.13:ADMU4000I: Server Node_axpin-zhgahh_AppClusterMember stop completed." | cut -d"." -f3,4 | cut -d":" -f1 

    выход

     05-09-2018-10.13 

    Итак, я думаю, вам нужно что-то вроде следующего

     cut -d"." -f3,4 YOUR_FILENAME | cut -d":" -f1 

    Где YOUR_FILENAME – это фактическое имя файла, которое вы хотите использовать

     awk -F: '{split($1,a,".");print a[3]"."a[4]}' input.txt zgrep -i "AppClusterMember stop completed" /pi_nfs/pixin/axpin zhgahh/was_logs/was_admin_logs/start_WPS.log.05-09-2018* | awk -F: '{split($1,a,".");print a[3]"."a[4]}' 
    • -F: разбивает записи на: (двоеточие)
    • split ($ 1, a, “.”) – Разделить запись на 1. (точка) и сохранить значения в массиве под названием
    • print a [3] “.” a [4] – вывести значения массива.