คำสั่งของคุณไม่ให้ผลลัพธ์เนื่องจากคำสั่งที่สอง เกรป
คำสั่งไม่ตรงกับอะไร:
grep -Eo "[0-9]{12}"
ที่มองหาเลข 12 ตัวติดกันเป๊ะๆ แต่คุณไม่เคยมีเลข 12 ตัวติดกันเลย เพราะตัวแรกของคุณ เกรป
พิมพ์วันที่และเวลาเท่านั้น ดังนั้นบรรทัดที่เหลือจึงหายไปแล้ว
หากอินพุตของคุณเป็นเพียงสองบรรทัดที่คุณแสดงจริงๆ สิ่งที่คุณต้องทำก็คือพิมพ์ฟิลด์ที่ 1, 2 และ 11 ในบรรทัดที่มีอย่างน้อย 11 ฟิลด์:
$ awk 'NF>10{print $1,$2,$11}' ไฟล์
2021-06-12 20:59:41.118 213550040214
หากคุณมีบรรทัดเพิ่มเติมและต้องการให้ตรงกับรูปแบบวันที่และเวลาที่ระบุจริงๆ คุณสามารถลองทำสิ่งนี้แทน:
$ sed -En 's/([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2 }:[0-9]{2}).*([0-9]{12}) .*/\1 \2/p' ไฟล์
2021-06-12 20:59:41 213550040214
เดอะ -E
เปิดใช้งานนิพจน์ทั่วไปแบบขยายซึ่งลดความซับซ้อนของไวยากรณ์ที่นี่และ -น
บอก เสด
ไม่ให้พิมพ์อะไรโดยปริยาย จากนั้น ตัวดำเนินการแทน (s/เก่า/ใหม่/
) จะพยายามจับคู่รูปแบบที่คุณกำลังมองหาและจับภาพ (รูปแบบ "การจับภาพ" ในวงเล็บ) เพื่อให้เราสามารถแทนที่ทุกอย่างด้วยส่วนที่ตรงกันเพียงสองส่วน (\1 \2
).
โปรดทราบว่าสิ่งนี้จะพบ ล่าสุด ยืด 12 หมายเลข ดังนั้นจะล้มเหลวหากคุณมีชุดดังกล่าวมากกว่าหนึ่งชุด เราสามารถให้วิธีแก้ปัญหาที่เจาะจงมากขึ้นแก่คุณได้ แต่คุณจะต้องให้รายละเอียดเพิ่มเติมเกี่ยวกับไฟล์ของคุณ อะไรคือตัวแปร และอะไรที่ไม่เคยเปลี่ยนแปลง