ฉันมีสตรีมขาเข้าที่พอร์ตอนุกรมโดยมีบรรทัดใหม่ปรากฏขึ้นหนึ่งครั้งต่อวินาที
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
สำหรับ มันเป็นปัญหาการบล็อกบัฟเฟอร์และการบัฟเฟอร์บรรทัด