คำตอบส่วนใหญ่จนถึงตอนนี้สมมติว่าอักขระ 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