ฉันจะเรียงลำดับโดยใช้คำสั่ง grep และ sort ได้อย่างไร


15

ผมอยากจะสร้างรายการที่เรียงลำดับของการบริการที่เป็น TCP ทั้งหมดที่พบในไฟล์/etc/services, ท่อส่งออกของคำสั่งgrep tcp /etc/servicesลงไปในคำสั่งแล้วเปลี่ยนเส้นทางออกของท่อนี้ลงในแฟ้มsort~/pipelab.txt

ฉันได้รับข้อความแสดงข้อผิดพลาดว่าผลลัพธ์ของฉันไม่ถูกต้องและฉันไม่รู้ว่าทำไม

นี่คือสิ่งที่ฉันได้ลองครั้งล่าสุด:

grep tcp /etc/services > ~/pipelab.txt | sort

คำตอบ:


11

> ~/pipelab.txt|เห็นได้ชัดว่าเป็นคำสั่งในด้านเดียวกันของผู้ประกอบการท่อ นั่นคือคุณเปลี่ยนเส้นทางการgrepส่งออกไปยังไฟล์แทนการไพพ์ลงในsort:

grep tcp /etc/services | sort > ~/pipelab.txt

21

คุณกำลังพยายามที่จะทั้งการเปลี่ยนเส้นทางการส่งออกของgrepไปยังแฟ้มและsortท่อมัน คุณไม่สามารถทำได้อย่างน้อยก็ไม่เป็นเช่นนั้น

คุณเพียงต้องการให้ฟีดเพื่อจัดเรียง:

grep tcp /etc/services | sort

และจากนั้นคุณต้องการเปลี่ยนเส้นทางเอาต์พุตที่เรียงลำดับ (เช่นสิ่งที่กำลังจัดเรียง) ไปยังไฟล์ดังนั้นคุณจึงทำการเปลี่ยนเส้นทางหลังจากเรียงลำดับ:

grep tcp /etc/services | sort > ~/pipelab.txt

ทั้งไพพ์และการเปลี่ยนทิศทางทำงานโดยเปลี่ยนตำแหน่งที่เอาต์พุตของคำสั่งไป คุณมีสองคนต่อสู้กับผลลัพธ์จากgrep(และท้ายที่สุดการเปลี่ยนเส้นทางจะชนะและเขียนผลลัพธ์ที่ไม่เรียงลำดับไปยังไฟล์ของคุณ)


ขอบคุณมากฉันคิดว่าตราบใดที่ฉันใส่คำสั่งการเรียงลำดับในทุกที่ที่มันจะยังคงทำงาน
user72510

1
@ user72510 ไปป์ไลน์ถูกประมวลผลตามลำดับจากซ้ายไปขวา grep tcp /etc/services | sort | head -n 5ที่มีประโยชน์จริงตัวอย่างเช่นถ้าคุณต้องการที่ห้าบรรทัดแรกของการส่งออกเรียงคุณสามารถทำ สิ่งสำคัญคือsortต้องทำก่อนheadหรือคุณจะไม่ได้รับสายที่คุณต้องการ
Derobert

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