我的串行端口有输入流,新行大约每秒出现一次
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
。这是块缓冲与行缓冲的问题。