ตกลงเพิ่มอีกเล็กน้อยในการบริจาคของฉัน แต่ฉันคิดว่ามันคุ้มค่า
ความต้องการที่จะตอบสนองต่อ OP เป็นคอลัมน์แรกที่มีค่าทศนิยมเป็น.000
หรือ.500
เท่านั้น ไม่มีข้อกำหนดสำหรับค่านำไม่ว่าจะเป็นตามช่วงหรือความยาว เพื่อความแข็งแรงมันไม่ควรจะสันนิษฐานว่าจะถูก จำกัด โดยอะไรยกเว้นว่าไม่มีอักขระที่ไม่ใช่ว่างก่อนคอลัมน์แรก (หรือก็ไม่คอลัมน์แรก) และว่าเนื้อหาของคอลัมน์แรกจะมีจุดทศนิยมที่.
, ในนั้นที่ไหนสักแห่ง
OP ต้องการใช้grep
ซึ่งจะพิมพ์ทั้งบรรทัดเมื่อพบคู่ที่ตรงกันดังนั้นสิ่งเดียวที่ต้องทำคือสร้างรูปแบบที่ตรงกับทั้งหมดและเฉพาะสิ่งที่ต้องการ
ความเรียบง่ายของตัวเองและไม่มีเหตุผลที่จะใช้sed
หรือawk
grep สามารถจัดการแหล่งที่มาเป็นไฟล์หรือไพพ์
เพื่อgrep
ใช้ไฟล์grep '^[^.]*\.[05]0\{2\}\s' the_file.txt
ไปยังgrep
จากไปป์ใช้my_command | grep '^[^.]*\.[05]0\{2\}\s'
รูปแบบคือ: ^
เริ่มต้นที่จุดเริ่มต้นของบรรทัด; [^.]
ตรงกับอักขระที่ไม่ใช่ทศนิยมใด ๆ *
หลาย ๆ ครั้งที่เป็นไปได้ (รวมถึงไม่มี) \.
ตรงกับจุดทศนิยม [05]
, จับคู่ทั้งห้าหรือศูนย์; 0\{2\}
, จับคู่อีก 2 ศูนย์ (แบ็กสแลชก่อนวงเล็บปีกกาเปิดและปิดป้องกันเชลล์จากการพยายามที่จะขยายรั้ง); \s
, จับคู่อักขระช่องว่าง (หมายถึงจุดสิ้นสุดของคอลัมน์ - เพื่อใช้ในกรณีการใช้งานที่แตกต่างกัน, แทนที่ด้วยตัวคั่นคอลัมน์, โดยทั่วไปคือคอมมา, เซมิโคลอน, เซมิโคลอนหรือแท็บ\t
)
หมายเหตุว่านี้จะตรงกับว่าสิ่งที่ OP ถาม จะไม่ตรงกัน.5000
หรือ.0000
แม้ว่าจะเทียบเท่าตัวเลขเพราะรูปแบบค้นหาห้าหรือศูนย์ตามด้วยศูนย์อีก2ตามด้วยช่องว่าง หากนั่นเป็นสิ่งสำคัญคำตอบอื่น ๆ ทั้งหมดก็คือความล้มเหลวในการที่พวกเขาจะตรงกับจำนวนศูนย์ใด ๆ มากกว่า 1 หลังจากตัวเลขทดสอบ และยกเว้นคำตอบของ FloHim เองพวกเขาจะจับคู่ทุกอย่างในคอลัมน์ที่สองที่เริ่มต้น .000
หรือ.500
รวมถึง.0003
และ.500T
และหนึ่งโดย FloHimself จะจับคู่สิ่งที่เทียบเท่ากับคณิตศาสตร์.0
และ.5
ไม่ว่าจะมีศูนย์อยู่กี่แห่ง อันสุดท้ายในขณะที่ไม่จับคู่สิ่งที่ OP ระบุไว้น่าจะตรงกับสิ่งที่ OP ต้องการอยู่แล้ว
ในที่สุดถ้าต้องการพลังและความเร็วของawk
ถึงแม้ว่า OP ขอgrep
แล้วคำสั่งจะเป็น:
ด้วยไฟล์ awk '$1 ~ /[^.]\.[05]0{2}$/' the_file.txt
ด้วยท่อ my_command | awk '$1 ~ /[^.]\.[05]0{2}$/'