Я только что наткнулся на этот пост, есть -по крайней мере сегодня -более простоеdate
-решение. Использование фреймворка в ответе @Gilles Quenot (написало бы комментарий к его ответчику, но недостаточно репутации):
while read d1_1 d1_2 d2_1 d2_2
do
date -d "$d2_1 $d2_2 $(date -d "$d1_1 $d1_2" +%s.%N) seconds ago" +%s.%N
done << END
2012-09-13 15:00:29,290 2012-09-13 15:00:29,297
END
Результат:
$./time_elapsed.sh
0.007000000
Использование %3N
вместо %N
приведет к усечению вывода до миллисекунд.
Вам просто не хватает бита fork
. Тогда командная строка будет:
socat TCP-LISTEN:8002,fork SYSTEM:/path/to/replace.sh
тогда файл /path/to/replace.sh должен иметь разрешение на выполнение и может содержать что-то вроде (это изменит все 'a' на 'b'):
#!/bin/bash
sed -u 's/a/b/g'
Если вы используете sed, важно добавить флаг-u
(unbuffered ).