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

เชี่ยวชาญคำสั่ง 'tr' ใน Linux: ฟังก์ชัน ไวยากรณ์ และการใช้งานจริง

คำสั่ง tr (translate) ใน Linux อ่านข้อความจาก standard input ดำเนินการแก้ไขข้อความบางอย่าง แล้วส่งผลลัพธ์ไปยัง standard output บทความนี้อธิบายและแสดงว่าทำไมและอย่างไรคุณอาจใช้มัน

ไวยากรณ์คำสั่ง tr

นี่คือไวยากรณ์ที่คุณต้องใช้สำหรับคำสั่งนี้:

tr OPTIONS SET1 [SET2]

โปรดทราบว่า:

  • OPTIONS ควรเป็นรายการตัวเลือกจากตารางด้านล่าง
  • ตัวอักษรใน SET1 จะถูกแทนที่ด้วยตัวอักษรในตำแหน่งที่ตรงกันใน SET2
    • ทั้งสอง SET เป็นตัวเลือก – บาง OPTIONS สามารถทำการแปลได้ด้วยตัวเอง จึงไม่จำเป็นต้องมีทั้งสอง SET เสมอไป
  • คุณจะสังเกตเห็นว่าไม่มีข้อความที่จะประมวลผล – ข้อความนี้จะถูกส่งผ่านการส่งทิศทางมาตรฐาน – รายละเอียดเพิ่มเติมในตัวอย่างด้านล่าง

นี่คือ OPTIONS ที่มีอยู่ – ตามคู่มือผู้ใช้:

OPTIONS คำอธิบาย
-c ใช้ค่ากลับ (complement) ของ SET1
-d ลบตัวอักษรใน SET1 ไม่ทำการแปล
-s แทนที่ลำดับของตัวอักษรซ้ำซ้อนที่อยู่ใน SET ที่ระบุล่าสุด ด้วยตัวอักษรตัวเดียวของตัวอักษรนั้น
-t ตัด SET1 ให้ยาวเท่ากับ SET2 ก่อน

หากคุณต้องการแทนที่หรือลบตัวอักษรพิเศษ เช่น newline และ tab ใน SETs คุณสามารถใช้ลำดับต่อไปนี้:

ลำดับที่ตีความ ตัวอักษรพิเศษ
\NNN ตัวอักษรที่มีค่าโคทัล NNN (1 ถึง 3 หลักโคทัล)
\\ Backslash
\b Backspace
\n บรรทัดใหม่ (New line)
\r Return
\t แท็บแนวนอน (Horizontal tab)
[:alnum:] ตัวอักษรและตัวเลขทั้งหมด
[:alpha:] ตัวอักษรทั้งหมด
[:blank:] ช่องว่างแนวนอนทั้งหมด
[:digit:] ตัวเลขทั้งหมด
[:lower:] ตัวอักษรพิมพ์เล็กทั้งหมด
[:space:] ช่องว่างแนวนอนหรือแนวตั้งทั้งหมด
[:upper:] ตัวอักษรพิมพ์ใหญ่ทั้งหมด

ผมได้รวมเฉพาะตัวเลือก/ลำดับที่ใช้บ่อยๆ ไว้ข้างต้น (เพราะมีเยอะมาก) คุณสามารถดูรายการตัวเลือกคำสั่งทั้งหมดในคู่มือผู้ใช้ ซึ่งหาได้โดยรัน:

man tr

ตัวอย่างคำสั่ง tr

นี่คือตัวอย่างบางส่วนของวิธีใช้คำสั่ง tr

เหล่านี้เป็นเพียงตัวอย่าง คุณสามารถผสมผสานตัวเลือกและลำดับเพื่อให้ได้ผลลัพธ์ที่ต้องการเอง

การลบตัวอักษร

ตัวอย่างด้านล่างลบตัวอักษรที่ระบุออกจากสตริง ผลลัพธ์ของคำสั่ง echo จะถูก pipe ไปยังคำสั่ง tr

echo "axbxcxdx" | tr -d 'x'

ด้านบน ตัวเลือก -d สั่งให้ tr ลบตัวอักษร x ออกจากผลลัพธ์ของคำสั่ง echo

จะได้ผลลัพธ์:

abcd 

ตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ (lowercase to UPPERCASE)

ตัวอย่างด้านล่างใช้ลำดับที่ตีความสำหรับ upper/lower เพื่อแทนที่ตัวอักษรพิมพ์เล็กทั้งหมดด้วยตัวพิมพ์ใหญ่:

echo "aBcDeFg" | tr '[:lower:]' '[:upper:]'

จะได้ผลลัพธ์:

ABCDEFG 

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

tr น่าจะใช้บ่อยที่สุดสำหรับแทนที่ตัวอักษรในสตริง – เช่น แทนที่ช่องว่างด้วยขีดกลาง:

echo "frogs and fish" | tr '[:blank:]' '-'

จะได้ผลลัพธ์:

frogs-and-fish 

ตัวอย่างนี้ใช้สอง SET – SET แรกมีตัวระบุช่องว่าง/บลैंक (เช่น space, tab) SET ที่สองมีขีดกลาง – ดังนั้นช่องว่างจึงถูกแทนที่ด้วยขีดกลาง (SET2 แทนที่ SET1)

สิ่งนี้มีประโยชน์เมื่อสร้างชื่อไฟล์สำหรับอัปโหลดเว็บไซต์ และต้องการให้แน่ใจว่าไม่มีช่องว่างในชื่อไฟล์เหล่านั้น

การแทนที่หลายตัวอักษร

ในตัวอย่างก่อนหน้า แต่ละ SET มีเพียงตัวอักษรเดียว สามารถระบุหลายตัวอักษรเพื่อทำการแทนที่หลายอย่างพร้อมกันได้:

echo "frogs and fish" | tr 'sf' 'SF'

จะได้ผลลัพธ์:

FrogS and FiSh 

ตามที่เห็น ตัวอักษรที่ตรงกันใน SET แรกถูกแทนที่ด้วยตัวอักษรจาก SET ที่สอง

การลบตัวอักษรซ้ำ

ด้านล่าง ลบช่องว่างซ้ำที่ไม่จำเป็นออกจากข้อความ:

echo 'Absolutely spaced out' | tr -s '[:space:]'

จะได้ผลลัพธ์:

Absolutely spaced out 

ตัวระบุ [:blank:] ถูกใช้กับตัวเลือก -s เพื่อระบุและลบช่องว่างซ้ำ