LINUX.ORG.RU

sed


0

1

Простая задачка, легко решаемая перлом(так и решена), но чисто из любопытства пытаюсь переписать все на сед :) И сразу же столкнулся с простой проблемой: строка начинается с юникс-тайм-стампа(да-да, как обычно, логи), и хотелось бы ее преобразовать в читабельный формат т.е. что-то в духе

sed "s/^\([0-9]\+\)/`date -d @\1 +%d/%m/%y-%H:%M:%S`/p;d"

★★★★★

Ответ на: комментарий от php-coder

P.S. А ошибка у вас была в том, что для s/// косой слэш используется в качестве разделителя, а после подстановки результата работы программы date этих слэшей становится слишком много. Можете проверить сами:

$ date +%s | echo sed "s/^\([0-9]\+\)/`date -d @\1 +%d/%m/%y-%H:%M:%S`/p;d"                       
sed s/^\([0-9]\+\)/01/01/70-07:00:01/p;d

Также в моём примере я использовал модификатор e для исполнения команды, ну и sed -n для подавления вывода и p чтобы указать что конкретно выводить на печать.

php-coder ★★★★★
()

perl позиционировался как замена sed и awk, так что проще на awk (strftime) это сделать

sdio ★★★★★
()
Ответ на: комментарий от php-coder

понял в чем бага была, невнимательность :) слеши :)
Спасибо :)

Jetty ★★★★★
() автор топика
Ответ на: комментарий от sdio

Интерес академический поэтому и без авк :)

Jetty ★★★★★
() автор топика
Ответ на: комментарий от Jetty

Не помню, чтобы встречал что-то толковое. Увы.

php-coder ★★★★★
()
Ответ на: комментарий от php-coder

Ого... пасиб :)
Я орылискую читаю книгу... по сед+авк :)

Jetty ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.