ในระบบ Linux และ Unix tr เป็นยูทิลิตี้บรรทัดคำสั่งที่แปล ลบ และ “บีบ ” อักขระซ้ำ – อันที่จริง tr ย่อมาจาก “แปล ” คู่มือนี้อธิบายวิธีใช้คำสั่ง tr ใน Linux พร้อมตัวอย่าง สามารถใช้สำหรับการดำเนินการต่างๆ เช่น การลบอักขระที่ซ้ำกัน การแปลงตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ และการแทนที่และลบอักขระพื้นฐาน มักใช้ร่วมกับคำสั่งอื่นๆ ผ่าน piping
Linux เป็นแกนหลักของเคอร์เนล/ระบบปฏิบัติการเบื้องหลังเทคโนโลยีส่วนใหญ่ที่เราใช้ในแต่ละวัน รวมถึง Android ซึ่งเป็นแพลตฟอร์มที่พวกเราหลายคนมีบนโทรศัพท์มือถือ เป็นโอเพ่นซอร์สและกำหนดค่าได้ง่าย
วิธีใช้คำสั่ง tr
ไวยากรณ์สำหรับการรันคำสั่ง tr มีดังนี้ โดยที่อักขระใน SET1 จะถูกแปลเป็นตัวอักษรใน SET2 :
tr OPTION... SET1 [SET2]
คำสั่ง tr ยอมรับอักขระสองชุด (โดยปกติมีความยาวเท่ากัน) จากนั้นจะแทนที่อักขระจากชุดแรกด้วยอักขระที่เกี่ยวข้องจากชุดที่สอง ในสถานการณ์สมมตินี้ SET เป็นสตริงของอักขระและรวมอักขระที่ใช้ Escape แบ็กสแลชพิเศษด้วย
ตัวอย่าง
การใช้ช่วงของอักขระ
คุณยังสามารถใช้ช่วงแทนคลาสอักขระได้หากต้องการ:
echo 'hello' | tr 'a-z' 'A-Z'
หากต้องการแปลงเป็นอีกทางหนึ่ง ก็แค่สลับตำแหน่งของเซต
แปลงกรณี
การแปลงตัวพิมพ์ใหญ่เป็นตัวพิมพ์เล็กหรือกลับกันเป็นหนึ่งในกรณีการใช้งานทั่วไปของคำสั่ง tr
[:lower:] จับคู่อักขระตัวพิมพ์เล็กทั้งหมดและ [:upper:] ตรงกับอักขระตัวพิมพ์ใหญ่ทั้งหมด
echo 'Hello' | tr '[:lower:]' '[:upper:]' HELLO
ลบบรรทัดว่าง
หากต้องการลบบรรทัดว่าง คุณต้อง “บีบ ” อักขระขึ้นบรรทัดใหม่ซ้ำ:
tr -s '\n' < input.txt > output.txt
ในข้างต้น เรากำลังใช้สัญลักษณ์การเปลี่ยนเส้นทาง ซึ่งจะเขียนผลลัพธ์ของคำสั่งไปที่ output.txt .
ลบอักขระที่ไม่ใช่ตัวเลขทั้งหมด
คำสั่งต่อไปนี้จะลบอักขระที่ไม่ใช่ตัวเลขทั้งหมด:
echo "The account number is 10879358" | tr -cd [:digit:]
[:ตัวเลข:] ย่อมาจากอักขระหลักทั้งหมด โดยใช้ -c ตัวเลือก คำสั่งลบอักขระที่ไม่ใช่ตัวเลข ผลลัพธ์ที่ตามมาจะมีลักษณะดังนี้:
10879358
พิมพ์ไดเรกทอรี $PATH ในบรรทัดใหม่
$PATH ตัวแปรสภาพแวดล้อมคือรายการของไดเร็กทอรี (คั่นด้วยโคลอน) ที่บอกเชลล์ว่าไดเร็กทอรีใดที่จะค้นหาไฟล์ปฏิบัติการเมื่อคุณพิมพ์คำสั่ง ในการพิมพ์แต่ละไดเร็กทอรีลงในบรรทัดใหม่แยกกัน เราต้องจับคู่โคลอน (: ) แล้วแทนที่ด้วยคำสั่งบรรทัดใหม่:
echo $PATH | tr ':' '\n' /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin
ใส่แต่ละคำขึ้นบรรทัดใหม่
ในการดำเนินการนี้ เราต้องจับคู่อักขระทั้งหมด (ที่ไม่ใช่ตัวอักษรและตัวเลข ) แล้วแทนที่ด้วยบรรทัดใหม่:
echo 'Linux is the best operating system in the world' | tr -cs '[:alnum:]'
ผลลัพธ์คือ:
Linux is the best operating system in the world
แทนที่อักขระ
หากเราต้องการแทนที่อักขระจากอินพุตมาตรฐาน ('การเข้ารหัส') ด้วยอักขระที่สอดคล้องกันของชุดที่สอง
echo 'coding' | tr 'co' 'hi'
การเกิด "c" แต่ละครั้งจะถูกแทนที่ด้วย "h" และ "o" ด้วย "i" ด้วยผลลัพธ์:
hiding
ชุดอักขระสามารถกำหนดได้โดยใช้ช่วงอักขระ ตัวอย่างเช่น แทนที่จะเขียน:
echo 'coding' | tr 'abcd' 'wxyz'
คุณสามารถใช้:
echo 'coding' | tr 'a-d' 'w-z' yozing
เมื่อ -c ใช้ตัวเลือก tr แทนที่อักขระทั้งหมดที่ ไม่ใช่ ใน SET1 .
ในตัวอย่างต่อไปนี้ อักขระทั้งหมดยกเว้น “li ” จะถูกแทนที่ด้วยอักขระตัวสุดท้ายจากชุดที่สอง:
$ echo 'coding' | tr -c 'cod' 'xy' liyyyiyyy
หากต้องการสะท้อนสตริงโดยไม่มีบรรทัดใหม่ ให้ใช้ตัวเลือก -n
-d ตัวเลือกบอกให้ tr ลบอักขระที่ระบุใน SET1 . เมื่อต้องการทำเช่นนี้โดยไม่ต้องบีบ คุณควรระบุเพียงชุดเดียวเท่านั้น
คำสั่งด้านล่างจะลบ l, I และ z ตัวอักษร:
echo 'Linuxize' | tr -d 'liz'