Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

คำสั่ง Linux tr พร้อมตัวอย่าง

ในระบบ 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'