У меня есть входящий поток через последовательный порт, и новые линии появляются примерно раз в секунду
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
Тем не менее, я не могу правильно сочетать TS с 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
. Это проблема буферизации блоков и строк.Bash может справиться с этим в
while read
циклеВы можете удалить строки только с пробелами с хитрым расширением параметра: удалите все начальные пробелы и посмотрите, пуста ли строка:
источник
tail -f /dev/ttyUSB0
вместо кошки или эха. Это будет продолжаться. Я не знал, как проверить это в моей системе.