วิธีรับบรรทัดแรกของเอาต์พุตจากบรรทัดคำสั่ง?


5

ฉันรันคำสั่ง find ที่ส่งคืนผลลัพธ์หลายรายการ แต่ฉันต้องการผลลัพธ์แรกเท่านั้น googling นิดหน่อยทำให้ฉันไปที่คำสั่ง "read" แต่ฉันไม่สามารถหามันได้และหน้า man ไม่ได้ช่วยอะไรมาก


ทำไมไม่เพียง แต่ส่งผลลัพธ์ไปยังไฟล์เท่านั้น (เช่น$ mycommand > myfile.txt)
Oxcug

@theMonster - นั่นไม่ใช่ท่อ นั่นคือการเปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปยังไฟล์ ท่อจะเกี่ยวข้องกับ ... ท่อ '|' เช่นls -l | head -1- ตอบโดย Jeff Clayton ไพพ์เป็นไฟล์หลอกแม้ว่าคุณสามารถทำให้เป็นไฟล์mkfifoได้ก็ตาม
JezC

คำตอบ:


10

ป้อนคำสั่งของคุณ (ตัวอย่าง:) ls -lจากนั้นheadคำสั่งด้วยไพพ์เช่น:

ls -l | head -1

2
เพื่อให้ได้ 10 อันดับแรกคุณจะเปลี่ยนเป็น -10
Jeff Clayton

ในกรณีของคุณมันจะเป็นแบบนี้ ...
เจฟฟ์เคลย์ตัน

ค้นหา (อาร์กิวเมนต์บรรทัดคำสั่งที่นี่) | หัว -1
Jeff Clayton

head -n 10- การอ้างอิงman head
Hannu

ฉันใช้ OS X ในขณะที่เขากล่าวถึงและหัวหน้างาน -1 (หัว -10 เช่นกัน) ไม่มี args พิเศษที่จำเป็น
เจฟฟ์เคลย์ตัน

0

คุณสามารถใช้คำสั่ง more เพื่อควบคุมจำนวนข้อความที่แสดงในแต่ละครั้ง

วิธีแก้ปัญหาของคุณ:

เปลี่ยนเส้นทางเอาต์พุตของคุณไปยังไฟล์ที่คุณสร้าง

ใช้สำหรับวนรอบกับ 1 รอบ (ตัวนับ = 1, -1 ในแต่ละครั้ง) คุณต้องใช้โทเค็นสำหรับฟังก์ชั่นการค้นหา

The For Loop จะ ECHO เป็นคำสั่งแรก

ลบไฟล์ของคุณ

เก็บเสียงสะท้อนของ FOR วนไว้ในตัวแปร (เป็นทางเลือก)

ฉันสามารถให้คำจำกัดความการใช้งานได้ถ้าคุณต้องการ


0

วิธีใช้ read

$ echo -e "1 \ n2 \ n3 \ n4 \ n5"
1
2
3
4
5

$ echo -e "1 \ n2 \ n3 \ n4 \ n5" | ในขณะที่อ่าน n; ทำเสียงสะท้อน "n: $ n"; เสร็จแล้ว
n: 1
n: 2
n: 3
n: 4
n: 5

$ 


ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของทุบตีสามารถใช้ได้ที่www.tldp.orgในAdvanced Bash-Scripting Guide,มีอีกหนึ่งคำแนะนำเกี่ยวกับการทุบตี
Bash Guide for Beginners


0

ฉันชอบวิธีการมากมายในการแก้ไขปัญหายูนิกซ์ นี่คือบางคนสมมติว่าcommandมันถูกแทนที่ด้วยสิ่งที่คุณกำลังทำอยู่:

command | awk 'NR == 1 {print}'

command | sed -e 1q

TMP=`mktemp tempXXX`; command > ${TMP} ; ed ${TMP} << HERE
1p
HERE

command | split -1 - ; cat xaa ; rm -f x[a-z][a-z]

LINECOUNT=$(command | tee tempfile | wc -l | sed -e 's/ *//g'); \
  tail -$((${LINECOUNT} - 1)) tempfile | diff -u - tempfile | grep '^+' | \
  grep -v '^+++' | sed -e 's/^+//'

หากผลลัพธ์ของคุณเป็นบันทึกความยาวคงที่ (ซึ่งอาจเป็นจริงตัวอย่างสำหรับ 80 อักขระของอินพุตพร้อมกับขึ้นบรรทัดใหม่ของเทอร์มินัล):

command | dd ibs=81 count=1

ณ จุดหนึ่งฉันทำงานเกี่ยวกับการติดตั้งระบบ Unix จากอุปกรณ์เก็บข้อมูลที่มีข้อ จำกัด ด้านความจุ (ฟลอปปี้ดิสก์) เรามักจะต้องหาวิธีที่จินตนาการในการใช้ชุดคำสั่งที่ จำกัด ซึ่งเราสามารถรวมไว้ในฟลอปปี้ 1.44MB :)

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