ทั้งหมดของ:
tr '[:lower:]' '[:upper:]'
(อย่าลืมคำพูดที่อื่นที่จะไม่ทำงานถ้ามีไฟล์ที่เรียกว่า:
, l
... หรือr
ในไดเรกทอรีปัจจุบัน) หรือ:
awk '{print toupper($0)}'
หรือ:
dd conv=ucase
มีวัตถุประสงค์เพื่อแปลงอักขระเป็นตัวพิมพ์ใหญ่ตามกฎที่กำหนดไว้ในโลแคลปัจจุบัน อย่างไรก็ตามแม้ที่โลแคลใช้ UTF-8 เป็นชุดอักขระและกำหนดการแปลงอย่างชัดเจนจากตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่อย่างน้อย GNU dd
, GNU tr
และmawk
(ค่าเริ่มต้นawk
บน Ubuntu เป็นต้น) ไม่ปฏิบัติตาม นอกจากนี้ยังไม่มีวิธีมาตรฐานในการระบุสถานที่อื่นนอกเหนือจากC
หรือPOSIX
ดังนั้นหากคุณต้องการแปลงไฟล์ UTF-8 ให้เป็นตัวพิมพ์ใหญ่แบบพกพาโดยไม่คำนึงถึงสถานที่ปัจจุบันคุณไม่มีโชคกับเครื่องมือมาตรฐาน
บ่อยครั้งสำหรับการพกพาทางออกที่ดีที่สุดของคุณอาจเป็น Perl:
$ echo lľsšcčtťzž | PERLIO=:utf8 perl -pe '$_=uc'
LĽSŠCČTŤZŽ
ตอนนี้คุณต้องระวังว่าไม่ใช่ทุกคนที่เห็นด้วยกับตัวอักษรที่เป็นตัวพิมพ์ใหญ่
ตัวอย่างเช่นในโลแคลภาษาตุรกีตัวพิมพ์ใหญ่i
ไม่ใช่I
แต่İ
( <U0130>
) ที่นี่พร้อมกับมรดกสืบทอดเครื่องมือtr
แทนที่จะเป็น GNU tr:
$ echo ií | LC_ALL=C.UTF-8 tr '[:lower:]' '[:upper:]'
IÍ
$ echo ií | LC_ALL=tr_TR.UTF-8 tr '[:lower:]' '[:upper:]'
İÍ
ในระบบของฉันการperl
แปลงจากด้านบนถูกกำหนดไว้/usr/share/perl/5.14/unicore/To/Upper.pl
และฉันพบว่ามันมีพฤติกรรมที่แตกต่างกันไปในอักขระบางตัวจาก GNU libc toupper()
ในC.UTF8
โลแคลเป็นต้นซึ่งperl
มีความแม่นยำมากกว่า ยกตัวอย่างเช่นperl
แปลงɀถึงcorrectlyอย่างถูกต้องGNU libc (2.17) จะไม่ทำเช่นนั้น