ในขณะที่พยายามอ่านหมายเลขเวอร์ชันvim
ฉันได้รับบรรทัดเพิ่มเติมมากมายที่ฉันต้องเพิกเฉย ฉันพยายามอ่านคู่มือhead
และลองใช้คำสั่งต่อไปนี้:
vim --version | head -n 1
ฉันต้องการทราบว่านี่เป็นแนวทางที่ถูกต้องหรือไม่?
ในขณะที่พยายามอ่านหมายเลขเวอร์ชันvim
ฉันได้รับบรรทัดเพิ่มเติมมากมายที่ฉันต้องเพิกเฉย ฉันพยายามอ่านคู่มือhead
และลองใช้คำสั่งต่อไปนี้:
vim --version | head -n 1
ฉันต้องการทราบว่านี่เป็นแนวทางที่ถูกต้องหรือไม่?
vim --version 2>&1 | sed 1q
:)
ตรวจสอบว่าแพ็กเกจของคุณส่งออกข้อมูลที่stderr
@WilliamPursell ให้การตรวจสอบหรือไม่
คำตอบ:
ใช่นั่นเป็นวิธีหนึ่งในการรับบรรทัดแรกของเอาต์พุตจากคำสั่ง
หากคำสั่งส่งออกสิ่งใดเป็นข้อผิดพลาดมาตรฐานที่คุณต้องการจับภาพในลักษณะเดียวกันคุณต้องเปลี่ยนทิศทางข้อผิดพลาดมาตรฐานของคำสั่งไปยังสตรีมเอาต์พุตมาตรฐาน:
utility 2>&1 | head -n 1
มีวิธีอื่นอีกมากมายในการจับบรรทัดแรกด้วยเช่นsed 1q
(ออกจากบรรทัดแรก) sed -n 1p
(พิมพ์เฉพาะบรรทัดแรก แต่อ่านทุกอย่าง) awk 'FNR == 1'
(พิมพ์เฉพาะบรรทัดแรก แต่อ่านทุกอย่างอีกครั้ง) เป็นต้น
ฉันจะใช้:
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
head -qn1 file_*.txt