ฉันจะดึงเฉพาะบรรทัดที่ต้องการจากเอาต์พุตเทอร์มินัลได้อย่างไร


16

ฉันอยากได้df -hเอาท์พุทสามบรรทัดเท่านั้น

ฉันควรใช้คำสั่งชนิดใด


16
หมายเหตุสำหรับอนาคต:คำถามนี้เป็นพื้นฐานที่ดีมาก โดยทั่วไปแล้วควรแสดงความพยายามและสิ่งที่คุณได้ลองก่อนถาม
Sergiy Kolodyazhnyy

แม้ว่ามันจะถูกต้องหรือไม่ที่จะได้รับบรรทัดที่ 3 ของไฟล์ที่มีรูปแบบคงที่ซึ่งสันนิษฐานว่าแตกต่างจากบรรทัดที่ 3 ของโปรแกรมวินิจฉัยที่มีเอาต์พุตที่ต่างกันขึ้นอยู่กับสถานะของระบบ ตัวอย่างเช่นการติดตั้งไดรฟ์ / พาร์ติชั่นใหม่ตามลำดับตัวอักษรก่อนบรรทัดที่ 3 ปัจจุบันของคุณจะระเบิด ดังนั้นคำตอบของ @ Random832 ด้านล่างจึงเป็นคำตอบที่ดีที่สุด
MarkHu

คำตอบ:


31

สิ่งนี้จะส่งออกบรรทัดที่ 3 โดยไม่คำนึงถึงเนื้อหา

df -h | sed -n 3p

+1 df -h|sed -n 3pสำหรับคำตอบที่มีขนาดเล็กที่สุด:
EKons

16

dfคำสั่งจริงยอมรับข้อโต้แย้งระบุระบบแฟ้มที่คุณต้องการ เพื่อให้คุณสามารถใช้ตัวอย่างเช่นหรือdf /homedf /dev/sda3

หากคุณตั้งใจที่จะแยกวิเคราะห์ผลลัพธ์ของสคริปต์คุณจะต้องใช้df -Pเพื่อรับประกันว่ามันจะไม่พันกันหลายบรรทัด ตัวอย่างเช่นคุณสามารถใช้df -Ph /home | tail -n +2(แต่ถ้าคุณแยกวิเคราะห์ผลลัพธ์สำหรับสคริปต์ให้ระวังความเป็นไปได้ของชื่อไฟล์ที่มีช่องว่างในตัว)


2
แค่นั้นแหละ! แทนที่จะแยกออกให้ใช้คำสั่งที่จะให้เพียงแค่สิ่งที่คุณต้องการ
fedorqui

1
แต่ OP บอกว่าเขาต้องการบรรทัดที่ 3 df /homeให้ส่วนหัว คุณกำลังตีความวัตถุประสงค์ของผู้ใช้ คุณอาจจะถูก คุณอาจจะผิดใครจะรู้?
Mike S

@MikeS มีคำตอบอีกสิบคำที่ครอบคลุมการรับบรรทัดที่ 3 โดยไม่มีบริบท ฉันให้ข้อมูลเพิ่มเติมเพื่อให้ OP มีถ้ามันมีประโยชน์สำหรับเขา และtail -n +2ลบส่วนหัว
Random832

14

คุณสามารถใช้การรวมกันของheadและtail:

df -h | head -3 | tail -1

หรือ

df -h | tail -n +3 | head -1

แต่โปรดทราบว่าdfอนุญาตให้กรองผลลัพธ์จากตัวเลือกของdfตัวเองคุณควรดูสิ่งเหล่านั้นก่อนที่จะใช้คำสั่งภายนอก

man dfตรวจสอบ


4
+1 สำหรับการกล่าวถึงว่า df สามารถกรองรายการเฉพาะได้
Sergiy Kolodyazhnyy

2
ที่จริงแล้วมันเกือบจะดีกว่าเสมอในการกรองข้อมูลของตัวเองก่อนที่จะไพพ์ไปยังโปรแกรมภายนอก
Zach Mertes


6

ฉันคิดว่าคุณไม่จำเป็นต้องมองหาบรรทัดที่สาม แต่สำหรับบรรทัดที่กล่าวถึงดิสก์เฉพาะ (เช่น/dev/sda3) หรือจุดเชื่อมต่อที่เฉพาะเจาะจง (เช่น/home)

ดังนั้นแทนที่จะแสดงบรรทัดที่สามซึ่งไม่ปลอดภัยเนื่องจากลำดับผลลัพธ์อาจเปลี่ยนแปลงและคุณอาจได้รับผลลัพธ์ที่แตกต่างกันคุณสามารถกรองผลลัพธ์ตามเนื้อหาและแสดงเฉพาะบรรทัดที่ตรงกับรูปแบบเฉพาะหรือมีคำหลัก

grepเครื่องมือของคุณสำหรับเรื่องนี้คือ

ตัวอย่างเช่นหากคุณต้องการบรรทัดเกี่ยวกับอุปกรณ์/dev/sda3คุณพิมพ์:

df -h | grep '/dev/sda3'

หากคุณต้องการให้บรรทัดที่กล่าวถึงโฮมไดเร็กตอรี่ของคุณเป็นจุดเชื่อมต่อใช้:

df -h | grep '/home'

3
หรือdf -h /dev/sda3หรือdf -h /home(หลังใช้งานได้แม้ว่าจะไม่ใช่จุดเชื่อมต่อ)
Random832

6

คุณสามารถใช้perl:

df -h | perl -ne 'print if $.==3' 

เป็นจำนวนบรรทัดปัจจุบันเพื่อให้คุณสามารถพิมพ์เส้นชับด้วย$.perl -ne 'print if $.==N'


1
นี่คือเหตุผลที่ Perl ยังคงเกี่ยวข้องในมุมมองของฉัน มันผสมผสานระหว่าง sed และ awk กับภาษาการเขียนโปรแกรมที่มีโครงสร้างที่ (ในขณะที่หลายคนบอกว่ามันน่าเกลียดจริง ๆ [และฉันอาจเห็นด้วย]) อย่างน้อยก็สอดคล้องและมีประโยชน์มากสำหรับหนึ่ง liners สั้นเหล่านี้ ขอบคุณ terdon นี่เป็นคำย่อที่เกือบจะเข้าใจได้ง่ายถ้า verbose มากกว่านี้
Mike S

@ MikeS ดีใจที่ได้ช่วย ในฐานะที่เป็นแฮ็กเกอร์ Perl ฉันต้องชี้ให้เห็นว่าโค้ด Perl นั้นน่าเกลียดอย่างที่คุณทำ โปรแกรมเมอร์ที่ดีสามารถเขียนโค้ดที่สวยงามใน Perl มันเป็นเพียงแค่ว่าไฟล์นั้นไม่ได้บังคับให้คุณและมันก็ไม่ใช่เรื่องง่าย
terdon

2

ความคิดแรกของฉันน่าจะเป็นแบบสร้างหัว

ตัวอย่าง:

df -h | head -3 | tail -1

head -3ทำให้เอาต์พุตหยุดหลังจากสามบรรทัดและtail -1จะเอาต์พุตเฉพาะบรรทัดสุดท้ายเท่านั้น

หรือถ้าคุณรู้ว่าลักษณะของเอาต์พุตจะเป็นอย่างไรคุณสามารถใช้grepเพื่อค้นหาบรรทัดที่มีสตริงที่แน่นอน

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