รับบรรทัดแรกของผลลัพธ์ของคำสั่งเชลล์


96

ในขณะที่พยายามอ่านหมายเลขเวอร์ชันvimฉันได้รับบรรทัดเพิ่มเติมมากมายที่ฉันต้องเพิกเฉย ฉันพยายามอ่านคู่มือheadและลองใช้คำสั่งต่อไปนี้:

vim --version | head -n 1

ฉันต้องการทราบว่านี่เป็นแนวทางที่ถูกต้องหรือไม่?


4
มันล้มเหลวได้อย่างไร? มันใช้ได้กับฉัน
choroba

1
ไวยากรณ์ถูกต้องข้อผิดพลาดคืออะไร .. ?
Kaushik Nayak

1
นั่นใช้ได้สำหรับฉัน แต่บางทีคุณอาจใช้ vim เวอร์ชันที่เขียนข้อมูลเวอร์ชันไปยัง stderr ลองvim --version 2>&1 | sed 1q
William Pursell

ก็ใช้ได้ผลสำหรับฉันเช่นกันใช่แนวทางของคุณถูกต้อง:)ตรวจสอบว่าแพ็กเกจของคุณส่งออกข้อมูลที่stderr@WilliamPursell ให้การตรวจสอบหรือไม่
David C. Rankin

คำตอบ:


132

ใช่นั่นเป็นวิธีหนึ่งในการรับบรรทัดแรกของเอาต์พุตจากคำสั่ง

หากคำสั่งส่งออกสิ่งใดเป็นข้อผิดพลาดมาตรฐานที่คุณต้องการจับภาพในลักษณะเดียวกันคุณต้องเปลี่ยนทิศทางข้อผิดพลาดมาตรฐานของคำสั่งไปยังสตรีมเอาต์พุตมาตรฐาน:

utility 2>&1 | head -n 1

มีวิธีอื่นอีกมากมายในการจับบรรทัดแรกด้วยเช่นsed 1q(ออกจากบรรทัดแรก) sed -n 1p(พิมพ์เฉพาะบรรทัดแรก แต่อ่านทุกอย่าง) awk 'FNR == 1'(พิมพ์เฉพาะบรรทัดแรก แต่อ่านทุกอย่างอีกครั้ง) เป็นต้น


4

ฉันจะใช้:

awk 'FNR <= 1' file_*.txt

ดังที่ @Kusalananda ชี้ให้เห็นว่ามีหลายวิธีในการจับบรรทัดแรกในบรรทัดคำสั่ง แต่การใช้head -n 1อาจไม่ใช่ตัวเลือกที่ดีที่สุดเมื่อใช้สัญลักษณ์แทนเนื่องจากจะพิมพ์ข้อมูลเพิ่มเติม การเปลี่ยน'FNR == i'เป็น'FNR <= i'อนุญาตให้ได้รับ i บรรทัดแรก

ตัวอย่างเช่นหากคุณมี n ไฟล์ชื่อ file_1.txt, ... file_n.txt:

awk 'FNR <= 1' file_*.txt

hello
...
bye

แต่ด้วยheadอักขระตัวแทนพิมพ์ชื่อของไฟล์:

head -1 file_*.txt

==> file_1.csv <==
hello
...
==> file_n.csv <==
bye

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