ฉันมีเซิร์ฟเวอร์ที่ส่งข้อมูลในการออกอากาศ UDP บนพอร์ต 1,0552 ข้อมูลคือ 7 ตัวเลขคั่นด้วยเครื่องหมายจุลภาคดังนั้น
5.351204,0.001968,-0.000473,-0.999222,0.000451,0.001455,1.084310
ฉันดึงข้อมูลนี้ด้วย
socat -u udp-recv:10552,reuseaddr -
ฉันต้องการเปลี่ยนรูปแบบของข้อมูลนี้ดังนั้นฉันจะทำให้เป็นข้อมูล ฉันไม่สนใจหมายเลขแรกดังนั้นฉันจึงลบออกด้วย
s/[^,]*,//;
ฉันเพิ่มช่องว่างหลังเครื่องหมายจุลภาคด้วย
s/,/, /g
ฉันจะเพิ่มวงเล็บเปิดไว้ที่จุดเริ่มต้นของแต่ละบรรทัดด้วย
s/^/(/
ในที่สุดฉันพยายามที่จะเพิ่มวงเล็บปิดลงที่ท้ายบรรทัดแต่ละบรรทัดด้วย
s/$/)/
คำสั่งสุดท้ายกลายเป็น
socat -u udp-recv:10552,reuseaddr - | sed 's/[^,]*,//;s/,/, /g;s/^/(/;s/$/)/'
ทุกอย่างทำงานได้ตามที่คาดไว้ยกเว้นวงเล็บปิดสุดท้ายจะปรากฏขึ้นที่จุดเริ่มต้นของแต่ละบรรทัดดังนั้นจึงดูเหมือน
)0.051727, -0.595779, -0.794678, 0.082047, 0.644327, -0.027242
การลบบิตสุดท้ายของคำสั่งสำหรับ
socat -u udp-recv:10552,reuseaddr - | sed 's/[^,]*,//;s/,/, /g;s/^/(/;'
ผลลัพธ์ใน
(0.079330, -0.608597, -0.786194, 0.092438, 0.657444, -0.031528
ฉันได้ลองแทนที่การต่อท้ายบรรทัดด้วย awk, tr และ GNU sed แต่ทุกอย่างดูเหมือนจะล้นบรรทัดหรืออะไรบางอย่าง
ฉันใช้ OS X 10.10.3 พร้อมกับ builtin Bash 3.2 มีอะไรอีกบ้างที่ฉันลองได้บ้าง
sed $'s/\r$/)/'