Tôi có một luồng đến tại một cổng nối tiếp, với các dòng mới xuất hiện khoảng một lần mỗi giây
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
Tôi muốn xóa các dòng trống và dấu thời gian còn lại.
sed sẽ loại bỏ các dòng trống và thêm dấu thời gian, nhưng tôi không thể thực hiện cập nhật dấu thời gian, nó chỉ báo cáo thời gian nó được gọi:
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
Tôi đã tìm thấy ts, một phần của Moreutils và có thể truy cập vào đó để có dấu thời gian cập nhật.
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
Tuy nhiên, tôi không thể kết hợp đúng cách với ts.
Điều này, có vẻ như nó sẽ làm những gì tôi muốn, không tạo ra đầu ra nào cả
wren@Raven:~$ cat /dev/ttyUSB0 | sed -e '/^$/d' | ts
^C
wren@Raven:~$
Tuy nhiên, việc đảo ngược thứ tự của các đường ống sẽ tạo ra một đầu ra, nhưng tất nhiên không phải là các đường dải không còn trống. Các sự thay thế khác hoạt động tốt, vì vậy tôi biết đường ống để sed đang hoạt động.
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
Vì vậy, tôi có một chút trở ngại. Tôi có thể làm cho sed loại bỏ các dòng không mong muốn, nhưng việc đánh dấu lại chúng trước khi loại bỏ phải là cách tiếp cận sai.
Tôi sẽ đánh giá cao một lời giải thích và một số trợ giúp.
sed -u
. Đây là một vấn đề về bộ đệm so với bộ đệm dòng.