เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | Contents | ถัดไป>

tr

การขอ tr โปรแกรมที่ใช้ในการ ทับศัพท์ ตัวอักษร เราสามารถมองได้ว่าเป็นการดำเนินการค้นหาและแทนที่ตามตัวอักษร การทับศัพท์เป็นกระบวนการในการเปลี่ยนตัวอักษรจากตัวอักษรหนึ่งไปเป็นอีกตัวอักษรหนึ่ง ตัวอย่างเช่น การแปลงอักขระจากตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่เป็นการทับศัพท์ เราสามารถทำการกลับใจใหม่ได้ด้วย tr ดังต่อไปนี้:


[me@linuxbox ~]$ echo "ตัวพิมพ์เล็ก" | tr az AZ

ตัวพิมพ์เล็ก

[me@linuxbox ~]$ echo "ตัวพิมพ์เล็ก" | tr az AZ

ตัวพิมพ์เล็ก


อย่างที่เราเห็น tr ทำงานบนอินพุตมาตรฐาน และส่งออกผลลัพธ์บนเอาต์พุตมาตรฐาน tr ยอมรับสองอาร์กิวเมนต์: ชุดอักขระที่จะแปลงและชุดอักขระที่เกี่ยวข้องที่จะแปลงเป็น ชุดอักขระอาจแสดงด้วยวิธีใดวิธีหนึ่งจากสามวิธี:

1. รายการแจกแจง ตัวอย่างเช่น, ABCDEFGHIJKLMNOPQRSTUVWXYZ

2. ช่วงอักขระ ตัวอย่างเช่น, อาริโซน่า. โปรดทราบว่าวิธีนี้บางครั้งอาจมีปัญหาเดียวกันกับคำสั่งอื่นๆ เนื่องจากลำดับการจัดเรียงของสถานที่ ดังนั้นควรใช้ด้วยความระมัดระวัง

3. คลาสอักขระ POSIX ตัวอย่างเช่น, [:บน:].

ในกรณีส่วนใหญ่ ชุดอักขระทั้งสองชุดควรมีความยาวเท่ากัน อย่างไรก็ตาม เป็นไปได้ที่ชุดแรกจะมากกว่าชุดที่สอง โดยเฉพาะอย่างยิ่งถ้าเราต้องการแปลงอักขระหลายตัวเป็นอักขระตัวเดียว:



[me@linuxbox ~]$ echo "ตัวพิมพ์เล็ก" | tr [:lower:] อา

อร๊ายยยยยย

[me@linuxbox ~]$ echo "ตัวพิมพ์เล็ก" | tr [:lower:] อา

อร๊ายยยยยย


นอกจากการทับศัพท์แล้ว tr อนุญาตให้ลบอักขระออกจากสตรีมอินพุตได้ ในตอนต้นของบทนี้ เราได้พูดถึงปัญหาของการแปลงไฟล์ข้อความ MS-DOS เป็นข้อความสไตล์ Unix ในการแปลงนี้ ต้องย้ายอักขระการขึ้นบรรทัดใหม่จากส่วนท้ายของแต่ละบรรทัด สามารถทำได้ด้วย tr ดังต่อไปนี้:

tr -d '\r' ดอส_ไฟล์ > ยูนิกซ์_ไฟล์


ที่ไหน ดอส_ไฟล์ เป็นไฟล์ที่จะแปลงและ ยูนิกซ์_ไฟล์ คือผลลัพธ์ รูปแบบของคำสั่งนี้ใช้ Escape Sequence \r เพื่อแสดงอักขระการคืนรถ เพื่อดูรายการลำดับและคลาสอักขระทั้งหมด tr รองรับลอง:


[me@linuxbox ~]$ tr -- ช่วยด้วย

[me@linuxbox ~]$ tr -- ช่วยด้วย


ภาพ

ROT13: แหวนถอดรหัสที่ไม่เป็นความลับ

หนึ่งการใช้งานที่น่าขบขันของ tr คือการดำเนินการ การเข้ารหัส ROT13 ของข้อความ ROT13 เป็นการเข้ารหัสประเภทที่ไม่สำคัญโดยอิงจากรหัสการแทนที่อย่างง่าย การเรียก ROT13 ว่า “การเข้ารหัส” เป็นการเอื้อเฟื้อ “การทำให้ข้อความสับสน” แม่นยำยิ่งขึ้น บางครั้งจะใช้กับข้อความเพื่อปิดบังเนื้อหาที่อาจไม่เหมาะสม วิธีการนี้เพียงแค่ย้ายอักขระแต่ละตัว 13 ตำแหน่งขึ้นไปบนตัวอักษร เนื่องจากนี่คือครึ่งทางของอักขระ 26 ตัวที่เป็นไปได้ การใช้อัลกอริทึมเป็นครั้งที่สองในข้อความจะคืนค่าให้อยู่ในรูปแบบเดิม เพื่อทำการเข้ารหัสนี้ด้วย tr:

echo "ข้อความลับ" | tr a-zA-Z n-za-mN-ZA-M

frperg grkg

การดำเนินการตามขั้นตอนเดียวกันเป็นครั้งที่สองส่งผลให้มีการแปล:

echo "frperg grkg" | tr a-zA-Z n-za-mN-ZA-M

ข้อความลับ

โปรแกรมอีเมลและโปรแกรมอ่านข่าว Usenet จำนวนหนึ่งรองรับการเข้ารหัส ROT13 Wikipedia มีบทความที่ดีในหัวข้อ:

http://en.wikipedia.org/wiki/ROT13


tr สามารถทำเคล็ดลับอื่นได้เช่นกัน การใช้ตัวเลือก -s tr สามารถ "บีบ" (ลบ) อินสแตนซ์ที่ทำซ้ำของอักขระได้:



[me@linuxbox ~]$ echo "aaabbbccc" | tr -s ab

อักษรย่อ

[me@linuxbox ~]$ echo "aaabbbccc" | tr -s ab

อักษรย่อ


ที่นี่เรามีสตริงที่มีอักขระซ้ำ โดยระบุให้ตั้ง “ab” เป็น trเรากำจัดตัวอักษรซ้ำในชุด โดยปล่อยให้อักขระที่หายไปจากชุด ("c") ไม่เปลี่ยนแปลง โปรดทราบว่าอักขระที่ซ้ำกันต้องอยู่ติดกัน หากไม่ใช่:


[me@linuxbox ~]$ echo "abcabcbc" | tr -s ab

abcabcabc

[me@linuxbox ~]$ echo "abcabcbc" | tr -s ab

abcabcabc


การบีบจะไม่มีผลใดๆ


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: