Если просто войти в процесс с PID 1, вы получите ответ:
strings /proc/1/exe |grep -q sysvinit
strings /proc/1/exe |grep -q systemd
sed -E -e 's/^.*log\.//' -e 's/\.[A-Z].*//' -e 's/([0-9]{4})-/\1 /'
Первое выражение удалит все в строке до log.
непосредственно перед датой.
Второе выражение удалит все из точки, следующей за временем (, единственной точкой, за которой следует -заглавная буква ).
Третье выражение заменит тире после четырехзначного -числа (года )пробелом.
Учитывая входные данные в вопросе, это даст
04-24-2018 08.36
Если дата и время имеют уникальный формат в каждой строке, который выглядит как NN-NN-NNNN-NN.NN
, где N
— число, вы можете использовать один grep:
$ grep -Eo '[0-9]{2}-[0-9]{2}-[0-9]{4}-[0-9]{2}[.][0-9]{2}' file1
04-24-2018-08.36
#to remove the third (last) dash you can pipe to sed
$ grep -Eo '[0-9]{2}-[0-9]{2}-[0-9]{4}-[0-9]{2}[.][0-9]{2}' file1 |sed 's/-/ /3g'
04-24-2018 08.36
Если вы хотите также «привязать» выше регулярное выражение после WPS.log.
, вы можете использовать gnu grep с -переключателем P (поддержкой регулярных выражений perl):
$ grep -Po '^.*WPS.log.\K[0-9]{2}-[0-9]{2}-[0-9]{4}-[0-9]{2}[.][0-9]{2}' file1 |sed 's/-/ /3g'
04-24-2018 08.36
#\K == forget everything captured so far == forget ^.*WPS.log.