我在串行端口有一个传入流,新行大约每秒出现一次
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
Run Code Online (Sandbox Code Playgroud)
我想去除空行并对其余部分进行时间戳。
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
Run Code Online (Sandbox Code Playgroud)
我找到了 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
Run Code Online (Sandbox Code Playgroud)
但是,我无法将 ts 与 sed 正确结合。
这看起来应该做我想做的事,根本不产生任何输出
wren@Raven:~$ cat /dev/ttyUSB0 | sed -e '/^$/d' | ts
^C
wren@Raven:~$
Run Code Online (Sandbox Code Playgroud)
然而,颠倒管道的顺序确实会产生输出,但当然不会去除不再空白的线条。其他替换工作正常,所以我知道 sed 的管道正在工作。
wren@Raven:~$ cat /dev/ttyUSB0 | ts | sed -e '/^$/d'
May …Run Code Online (Sandbox Code Playgroud)