При использовании SED для замены меток времени удобочитаемыми датами метка времени всегда заменяется датой эпохи плюс значение, помещенное после "\"
. Я работаю с примером Perl, но предпочитаю использовать sed.Я пробовал варьировать escape-последовательности и заключать в кавычки "'` и т. Д.
sed -re "s/([0-9]{10})/$(date -d @\1)/g" mac.txt
ввод (одна строка):
834|task|3||1561834555|Ods|12015|info|Task HMI starting 837|task|3||1561834702|Nailsd|5041|info|Configured with engine 6000.8403 (/opt/NAI/LinuxShield/engine/lib/liblnxfv.so), dats 9297.0000 (/opt/NAI/LinuxShield/engine/dat), 197 extensions, 0 extra drivers
Ожидается преобразование даты, но результаты:
834|task|3||Wed Dec 31 19:00:01 EST 1969|Ods|12015|info|Task HMI starting 837|task|3||Wed Dec 31 19:00:01 EST 1969|Nailsd|5041|info|Configured with engine 6000.8403 (/opt/NAI/LinuxShield/engine/lib/liblnxfv.so), dats 9297.0000 (/opt/NAI/LinuxShield/engine/dat), 197 extensions, 0 extra drivers 838|task.
в основном: это то, что называется:
$(date -d @\1) instead of $(date -d @\1561834555)