У мене вхідний потік на послідовному порту, з новими рядками, що з’являються приблизно раз на секунду
wren@Raven:~$ cat /dev/ttyUSB0
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
Я хочу зняти порожні рядки та позначити решту часу.
sed знищить порожні рядки та додасть часову позначку, але я не можу оновлювати часову марку, вона просто повідомляє про час, коли її викликали:
wren@Raven:~$ cat /dev/ttyUSB0 | sed -e '/^$/d' -e "s/$/`date +\,%F\,%T`/"
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
^C
Я знайшов ts, що є частиною Moreutils, і можу надіслати його, щоб отримати часову мітку оновлення.
wren@Raven:~$ cat /dev/ttyUSB0 | ts
May 14 09:49:26 A_Sensor1,B_22.00,C_50.00
May 14 09:49:26
May 14 09:49:27 A_Sensor1,B_22.00,C_50.00
^C
Однак я не можу правильно поєднувати тс з sed.
Це, схоже, має робити те, що я хочу, взагалі не дає результатів
wren@Raven:~$ cat /dev/ttyUSB0 | sed -e '/^$/d' | ts
^C
wren@Raven:~$
Однак зміна порядку труби дає результат, але, звичайно, не позбавлені лінії, які вже не пусті. Інші заміни працюють добре, тому я знаю, що труба до sed працює.
wren@Raven:~$ cat /dev/ttyUSB0 | ts | sed -e '/^$/d'
May 14 10:07:25 A_Sensor1,B_22.00,C_50.00
May 14 10:07:25
May 14 10:07:26 A_Sensor1,B_22.00,C_50.00
May 14 10:07:26
^C
Тож я трохи збита з пантелику. Я, мабуть, можу змусити sed видалити небажані лінії, але мітка часу перед видаленням повинна бути неправильним підходом.
Буду вдячний за пояснення та допомогу.
sed -u
. Це питання блокування буферизації проти буферизації ліній.