คำตอบส่วนใหญ่จนถึงตอนนี้สมมติว่าอักขระ 1 ไบต์ = 1 ซึ่งอาจไม่ใช่กรณีนี้หากคุณใช้โลแคลที่ไม่ใช่ ASCII
วิธีที่แข็งแกร่งกว่าเล็กน้อยในการทำ:
testString=$(head -c 200 < "${filename}") &&
printf '%s\n' "${testString:0:50}"
โปรดทราบว่าสิ่งนี้ถือว่า:
- คุณกำลังใช้
ksh93, bash(หรือเมื่อเร็ว ๆ นี้zshหรือmksh(แม้เพียง charset หลายไบต์การสนับสนุนจากการmkshเป็น UTF-8 และหลังจากset -o utf8-mode)) และรุ่นของheadการสนับสนุนที่-c(ส่วนใหญ่ทำในปัจจุบัน แต่ไม่ได้มาตรฐานอย่างเคร่งครัด)
- สถานที่ปัจจุบันถูกตั้งค่าการเข้ารหัสเช่นเดียวกับไฟล์ (ประเภท
locale charmapและfile -- "$filename"เพื่อตรวจสอบว่า); ถ้าไม่ตั้งค่าด้วยเช่น LC_ALL=en_US.UTF-8)
- ฉันใช้ขนาด 200 ไบต์แรกของไฟล์โดย
headสมมติว่าเป็นกรณีที่เลวร้ายที่สุด UTF-8 ซึ่งอักขระทั้งหมดจะถูกเข้ารหัสที่มากที่สุด 4 ไบต์ นี่ควรจะครอบคลุมกรณีส่วนใหญ่ที่ฉันสามารถคิดได้
|?cat ${filename} | cut -c1-50