Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เรียนรู้คำสั่ง tr ใน Linux: ตัวอย่างปฏิบัติ & กรณีการใช้งาน

ในระบบ Linux และ Unix tr เป็นยูทิลิตี้บรรทัดคำสั่งที่แปลง ลบ และ "บีบอัด" ตัวอักษรที่ซ้ำกัน – จริงๆ แล้ว tr ย่อมาจาก "translate" คู่มือนี้อธิบายวิธีใช้คำสั่ง tr ใน Linux พร้อมตัวอย่าง มันสามารถใช้สำหรับการดำเนินการเช่น การลบตัวอักษรซ้ำ การแปลงตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ และการแทนที่และลบตัวอักษรพื้นฐาน มันมักใช้ร่วมกับคำสั่งอื่นๆ ผ่าน piping

Linux เป็นเคอร์เนล/แกนระบบปฏิบัติการพื้นฐานด้านหลังเทคโนโลยีส่วนใหญ่ที่เราใช้ในชีวิตประจำวัน รวมถึง Android – แพลตฟอร์มที่หลายคนในเราจะมีบนโทรศัพท์มือถือ มันเป็น open-source และกำหนดค่าได้ง่าย

วิธีใช้คำสั่ง tr

ไวยากรณ์สำหรับการรันคำสั่ง tr มีดังนี้ โดยตัวอักษรใน SET1 จะถูกแปลงเป็นตัวอักษรใน SET2:

tr OPTION... SET1 [SET2]

คำสั่ง tr ยอมรับสองชุดของตัวอักษร (โดยปกติความยาวเท่ากัน) มันจะแทนที่ตัวอักษรจากชุดแรกด้วยตัวอักษรที่สอดคล้องจากชุดที่สอง ในสถานการณ์นี้ SET คือสตริงของตัวอักษรและรวมถึงตัวอักษรพิเศษที่หนีบด้วย backslash

ตัวอย่าง

การใช้ช่วงตัวอักษร

คุณสามารถใช้ช่วงแทนคลาสตัวอักษรได้หากต้องการ:

echo 'hello' | tr 'a-z' 'A-Z'

เพื่อแปลงอีกทางหนึ่ง เพียงสลับตำแหน่งของชุด

แปลงเคส

การแปลงตัวพิมพ์ใหญ่เป็นตัวพิมพ์เล็ก หรือในทางกลับกัน เป็นหนึ่งในกรณีการใช้งานที่พบบ่อยที่สุดของคำสั่ง tr

[:lower:] ตรงกับตัวอักษรพิมพ์เล็กทั้งหมด และ [:upper:] ตรงกับตัวอักษรพิมพ์ใหญ่ทั้งหมด

echo 'Hello' | tr '[:lower:]' '[:upper:]' HELLO

ลบบรรทัดว่าง

เพื่อลบบรรทัดว่าง คุณต้อง "บีบอัด" ตัวอักษร newline ที่ซ้ำกัน:

tr -s '\n' < input.txt > output.txt

ในข้างต้น เราใช้สัญลักษณ์การเปลี่ยนทิศทาง ซึ่งจะเขียนเอาต์พุทของคำสั่งไปยัง output.txt

ลบตัวอักษรที่ไม่ใช่ตัวเลขทั้งหมด

คำสั่งต่อไปนี้ลบตัวอักษรที่ไม่ใช่ตัวเลขทั้งหมด:

echo "The account number is 10879358" | tr -cd [:digit:]

[:digit:] ย่อมาจากตัวอักษรตัวเลขทั้งหมด ด้วยการใช้ตัวเลือก -c คำสั่งจะลบตัวอักษรที่ไม่ใช่ตัวเลข เอาต์พุทต่อไปจะมีลักษณะดังนี้:

10879358

พิมพ์ไดเรกทอรี $PATH บนบรรทัดใหม่

ตัวแปรสภาพแวดล้อม $PATH เป็นรายการไดเรกทอรี (คั่นด้วยcolon) ที่บอก Shell ว่าจะค้นหาไฟล์ที่รันได้ในไดเรกทอรีใดเมื่อคุณพิมพ์คำสั่ง เพื่อพิมพ์แต่ละไดเรกทอรีบนบรรทัดใหม่แยกต่างหาก เราต้องจับคู่ colon (:) และแทนที่ด้วยคำสั่งบรรทัดใหม่:

echo $PATH | tr ':' '\n' /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin 

วางแต่ละคำบนบรรทัดใหม่

เพื่อทำเช่นนี้ เราต้องจับคู่ตัวอักษรทั้งหมด (ที่ไม่ใช่ alphanumeric) และแทนที่ด้วยบรรทัดใหม่:

echo 'Linux is the best operating system in the world' | tr -cs '[:alnum:]'

เอาต์พุทคือ:

Linux is the best operating system in the world

แทนที่ตัวอักษร

หากเราต้องการแทนที่ตัวอักษรจาก standard input ('coding') ด้วยตัวอักษรที่สอดคล้องจากชุดที่สอง

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

เพื่อ echo สตริงโดยไม่มีบรรทัดใหม่ ใช้ตัวเลือก -n

ตัวเลือก -d บอก tr ให้ลบตัวอักษรที่ระบุใน SET1 เมื่อคุณต้องการทำเช่นนี้โดยไม่บีบอัด คุณควรระบุชุดเดียวเท่านั้น

คำสั่งด้านล่างจะลบตัวอักษร l, I, และ z:

echo 'Linuxize' | tr -d 'liz'