Android

คำสั่ง Tr ใน linux พร้อมตัวอย่าง

Linux tr command Part 1

Linux tr command Part 1

สารบัญ:

Anonim

tr คือโปรแกรมอรรถประโยชน์บรรทัดคำสั่งในระบบ Linux และ Unix ที่แปลลบและบีบอักขระจากอินพุตมาตรฐานและเขียนผลลัพธ์ไปยังเอาต์พุตมาตรฐาน

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

ในบทช่วยสอนนี้เราจะแสดงวิธีใช้คำสั่ง tr ผ่านตัวอย่างการปฏิบัติและคำอธิบายโดยละเอียดเกี่ยวกับตัวเลือกที่ใช้กันทั่วไป

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

ไวยากรณ์สำหรับคำสั่ง tr มีดังนี้:

tr OPTION… SET1

tr ยอมรับอักขระสองชุดโดยปกติมีความยาวเท่ากันและแทนที่อักขระของชุดแรกด้วยอักขระที่สอดคล้องกันจากชุดที่สอง

SET นั้นเป็นสตริงของอักขระรวมถึงอักขระพิเศษที่มีเครื่องหมายแบคสแลช

ในตัวอย่างต่อไปนี้ tr จะแทนที่อักขระทั้งหมดจากอินพุตมาตรฐาน (linuxize) โดยการจับคู่อักขระจากชุดแรกกับชุดอักขระที่ตรงกันจากชุดที่สอง

echo 'linuxize' | tr 'lin' 'red'

การเกิด l แต่ละครั้งจะถูกแทนที่ด้วย r , i ด้วย e , และ n ด้วย d :

reduxeze

ชุดอักขระยังสามารถกำหนดได้โดยใช้ช่วงอักขระ ตัวอย่างเช่นแทนที่จะเขียน:

echo 'linuxize' | tr 'lmno' 'wxyz'

คุณสามารถใช้ได้:

echo 'linuxize' | tr 'ln' 'w-z'

เมื่อใช้ตัวเลือก -c ( --complement ) tr จะแทนที่อักขระทั้งหมดที่ไม่ได้อยู่ใน SET1

ในตัวอย่างด้านล่างอักขระทั้งหมดยกเว้น“ li” จะถูกแทนที่ด้วยอักขระสุดท้ายจากชุดที่สอง:

echo 'linuxize' | tr -c 'li' 'xy'

liyyyiyyy

ดังที่คุณอาจสังเกตเห็นว่าเอาต์พุตด้านบนมีอักขระที่มองเห็นได้มากกว่าหนึ่งอินพุต นี่เป็นเพราะคำสั่ง echo พิมพ์อักขระบรรทัดใหม่ที่มองไม่เห็น ซึ่งถูกแทนที่ด้วย y หากต้องการ echo สตริงที่ไม่มีบรรทัดใหม่ให้ใช้อ็อพชัน -n

ตัวเลือก -d ( --delete ) บอกให้ tr ลบตัวอักษรที่ระบุใน SET1 เมื่อลบตัวอักษรโดยไม่ต้องบีบให้ระบุเพียงชุดเดียว

คำสั่งด้านล่างจะลบอักขระ l , i และ z :

echo 'Linuxize' | tr -d 'liz'

อักขระ L ไม่ถูกลบเนื่องจากอินพุตประกอบด้วยตัวพิมพ์ใหญ่ L ในขณะที่อักขระ l ใน SET เป็นตัวพิมพ์เล็ก

Lnuxe

ตัวเลือก -s ( --squeeze-repeats ) จะแทนที่ลำดับเหตุการณ์ที่เกิดซ้ำด้วยชุดอักขระใน SET สุดท้าย

ในตัวอย่างต่อไปนี้ tr ลบอักขระช่องว่างซ้ำ:

echo "GNU \ Linux" | tr -s ' '

GNU \ Linux

เมื่อใช้ SET2 ลำดับของอักขระที่ระบุใน SET1 จะถูกแทนที่ด้วย SET2

echo "GNU \ Linux" | tr -s ' ' '_'

GNU_\_Linux

--truncate-set1 -t ( --truncate-set1 ) บังคับให้ tr ตัดทอน SET1 เป็นความยาวของ SET2 ก่อนที่จะทำการประมวลผลเพิ่มเติม

โดยค่าเริ่มต้นหาก SET1 มีขนาดใหญ่กว่า SET2 tr จะใช้อักขระสุดท้ายของ SET2 อีกครั้ง นี่คือตัวอย่าง:

echo 'Linux ize' | tr 'abcde' '12'

ผลลัพธ์แสดงให้เห็นว่าตัวอักษร e จาก SET1 นั้นตรงกับตัวอักษรล่าสุดของ SET2 ซึ่งก็คือ 2 :

Linux iz2

ตอนนี้ใช้คำสั่งเดียวกันกับตัวเลือก -t :

echo 'Linux ize' | tr -t 'abcde' '12'

Linux ize

คุณจะเห็นว่าตัวละครสามตัวสุดท้ายของ SET1 ถูกลบออก SET1 จะกลายเป็น 'ab' ความยาวเท่ากับ SET2 และไม่มีการแทนที่

ตัวเลือกการรวม

คำสั่ง tr ยังอนุญาตให้คุณรวมตัวเลือกต่าง ๆ ตัวอย่างเช่นคำสั่งต่อไปนี้จะแทนที่อักขระทั้งหมดยกเว้น i ด้วย 0 จากนั้นบีบอักขระ 0 ซ้ำแล้วซ้ำอีก:

echo 'Linux ize' | tr -cs 'i' '0'

0i0i0

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

ในส่วนนี้เราจะกล่าวถึงตัวอย่างการใช้งานทั่วไปของคำสั่ง tr

แปลงตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่

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

echo 'Linuxize' | tr '' ''

LINUXIZE

แทนที่จะเป็นคลาสอักขระคุณสามารถใช้ช่วง:

echo 'Linuxize' | tr 'az' 'A-Z'

หากต้องการแปลงตัวพิมพ์ใหญ่เป็นตัวพิมพ์เล็กให้เปลี่ยนตำแหน่งของชุด

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

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

echo "my phone is 123-456-7890" | tr -cd

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

1234567890

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

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

echo 'GNU is an operating system' | tr -cs '' '\n'

GNU is an operating system

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

หากต้องการลบบรรทัดว่างเพียงบีบอักขระขึ้นบรรทัดใหม่ที่ซ้ำกัน:

tr -s '\n' < file.txt > new_file.txt

ในคำสั่งด้านบนเราใช้สัญลักษณ์การเปลี่ยนเส้นทาง < เพื่อส่งเนื้อหาของ file.txt ไปยังคำสั่ง tr การเปลี่ยนเส้นทาง > เขียนเอาต์พุตของคำสั่งไปที่ new_file.txt

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

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

หากต้องการพิมพ์แต่ละไดเรกทอรีในบรรทัดแยกเราต้องจับคู่โคลอน (:) และแทนที่ด้วยบรรทัดใหม่:

echo $PATH | tr ':' '\n'

/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin

ข้อสรุป

tr คือคำสั่งสำหรับการแปลหรือลบอักขระ

แม้ว่าจะมีประโยชน์มาก tr สามารถใช้ได้กับอักขระเดี่ยวเท่านั้น สำหรับการจับคู่รูปแบบที่ซับซ้อนมากขึ้นและการจัดการสตริงคุณควรใช้ sed หรือ awk

เทอร์มินัล tr