Grep: แสดงเฉพาะบรรทัดที่ 2 ด้านบน


0

สมมติว่าฉันมีไฟล์ข้อความพร้อมเนื้อหา:

foo
bar
whatever

something I don't know
bar2
whatever

และเป็นผลลัพธ์จากการทำgrep whatever myfile.txt(และ / หรือsedและ / หรือawk) ฉันต้องการ:

foo
something I don't know

ฉันได้พยายามใช้ตัวเลือก-B 2แต่ที่ผลทั้งสองและfoo ไม่สามารถทำได้เนื่องจากมีหลายระเบียนที่แตกต่างกันbar
... | grep -v bar


ที่นี่มีบริบทไม่เพียงพอที่จะรู้ว่าคุณกำลังพยายามอะไรอยู่ หากคุณต้องการ grep สำหรับ 'foo' คุณจะได้ foo และ foo2 ดังนั้นทำไมจึงไม่ทำงาน
djsmiley2k

เห็นได้ชัดว่าฉันไม่รู้ว่ามีอะไรอยู่นี่เป็นเพียงตัวอย่าง อย่างไรก็ตามมีการแก้ไขคำถามเพื่อให้เข้าใจได้ง่ายขึ้น
sysfiend

คุณต้องการให้บรรทัด 2 บรรทัดเหนือผลลัพธ์หรือบรรทัดสุดท้ายหลังจากบรรทัดว่างหรือไม่? มีบล็อกของผลลัพธ์ 4 รายการขึ้นไปถ้าเป็นเช่นนั้นคุณต้องการผลลัพธ์อะไร
djsmiley2k

ฉันต้องการให้บรรทัดที่ 2 อยู่เหนือรูปแบบการจับคู่พวกมันอยู่ในบล็อค 3 ดังนั้นฉันต้องการบรรทัดแรกของทุกบล็อก
sysfiend

-1 คำถามของคุณไม่ชัดเจนเนื่องจากคุณไม่ต้องการให้บรรทัดที่ 2 ด้านบนชัดเจน บางทีคุณอาจต้องการบรรทัดที่ 2 ด้านบนและบรรทัดแรกหลังจากบรรทัดใหม่ที่มาถึง แต่คำถามของคุณไม่ได้ระบุว่า
barlop

คำตอบ:



-1

ดังนั้นนี่คือทางออกของฉันเนื่องจากฉันไม่สามารถหาวิธีที่จะทำได้:

เมื่อฉันถูกส่งคืนพร้อมบล็อกจำนวนเนื้อหาให้พูดว่า:

foo
bar
whatever
--
foo2
bar2
whatever
--

และอื่น ๆ ฉันใช้ตัวคั่นของ grep และมีบรรทัดถัดไปที่เป็นเช่นนั้นแล้วลบออก:

grep -B2 whatever myfile.txt | grep -v whatever | grep -A 1 -E '\-\-' | grep -v  -E '\-\-'

และนั่นเป็นเพียงผลลัพธ์:

foo
foo2

-1 ขาดความชัดเจนมากขึ้น .. ดังนั้นคุณเขียนผลลัพธ์ที่ด้านล่าง .. บล็อกนั้นที่ด้านบนซึ่งคุณบอกว่าจะถูกส่งกลับ .. นั่นคือ "เอาท์พุท"? เป็นก้อนแรกที่คุณเขียนในคำตอบของคุณผลลัพธ์ของ grep หรือเป็นข้อมูลการทดสอบใหม่ คุณไม่สามารถอ้างโดยตรงจากพรอมต์คำสั่ง และคุณก็ไม่ต้องพยายามอธิบายตรรกะของโซลูชันด้วย
barlop
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.