Cara Menggunakan Perintah tr Linux

Diterbitkan: 2023-05-17
Ubuntu Linux memulai layar pada laptop
Jordan Gloor / How-To Geek
Perintah tr melakukan transformasi pada aliran teks, menghasilkan aliran baru sebagai keluarannya. Anda dapat mengganti, menghapus, atau mengonversi karakter sesuai dengan aturan yang Anda tetapkan pada baris perintah.

Apakah Anda memerlukan metode tanpa embel-embel untuk memanipulasi aliran teks di Linux? Tidak terlihat lagi dari perintah tr, yang dapat menghemat waktu Anda dalam mengganti, menghapus, menggabungkan, dan mengompresi teks masukan. Begini caranya.

Daftar isi

Apa itu Perintah tr?
Mengganti Karakter
Menggunakan Rentang dan Token
Membalikkan Pertandingan
Menghapus dan Meremas Karakter
Menghapus Karakter
Menggabungkan dan Memisahkan Garis
Menggunakan tr Dengan Pipa
Sederhana Adalah Sederhana

Apa itu Perintah tr?

Perintah Linux tr adalah utilitas yang cepat dan sederhana untuk menghapus karakter yang tidak diinginkan dari aliran teks, dan untuk trik manipulasi rapi lainnya. Ia mendapatkan namanya dari kata “terjemahkan”, dan akar tr berakar dalam pada tradisi Unix.

Seperti yang kita semua tahu, Linux adalah penulisan ulang open-source dari Unix. Itu juga menambahkan barang-barangnya sendiri ke dalam campuran. Ini bukan klon byte-untuk-byte, tetapi jelas membutuhkan banyak prinsip desain dan arahan teknik dari sistem operasi Unix.

Meskipun sejauh ini hanya dua distribusi Linux yang telah disertifikasi sebagai POSIX compliant dan dicap sebagai yang diterima secara resmi sebagai implementasi Unix—EulerOS dan Inspur K-UX—Linux hampir sepenuhnya menggantikan Unix di dunia bisnis.

Semua distribusi Linux, setidaknya dalam utilitas intinya, menganut filosofi Unix. Filosofi Unix merangkum visi para perintis Unix untuk sistem operasi baru mereka. Ini sering diparafrasekan sebagai "Tulis program yang melakukan satu hal dengan baik." Tapi ada lebih dari itu.

Salah satu inovasi yang paling kuat adalah bahwa program harus menghasilkan keluaran yang dapat digunakan sebagai masukan untuk program lain. Kemampuan untuk menyatukan utilitas baris perintah daisy chain, menggunakan aliran output dari satu program sebagai aliran input ke program berikutnya sejalan, sangat kuat.

Terkadang Anda ingin menyempurnakan atau men-tweak output dari satu program sebelum mencapai program berikutnya. Atau mungkin Anda tidak mengambil input dari alat baris perintah Linux, Anda mengalirkan teks dari file yang belum dibuat dengan mempertimbangkan kebutuhan khusus Anda.

Di sinilah tr muncul dengan sendirinya. Ini memungkinkan Anda untuk melakukan serangkaian transformasi sederhana pada aliran inputnya, untuk menghasilkan aliran outputnya. Aliran keluaran itu dapat dialihkan ke file, dimasukkan ke program Linux lain, atau bahkan ke instance tr lainnya agar beberapa transformasi diterapkan ke aliran.

Mengganti Karakter

Perintah tr beroperasi pada aliran inputnya sesuai dengan aturan. Digunakan tanpa opsi baris perintah apa pun, tindakan default tr adalah mengganti karakter dalam input stream dengan karakter lain.

Perintah untuk tr biasanya membutuhkan dua set karakter. Set pertama menyimpan karakter yang akan diganti jika ditemukan di input stream. Set kedua berisi karakter yang akan diganti.

Cara kerjanya adalah kemunculan karakter pertama di set satu akan digantikan oleh karakter pertama di set dua. Kemunculan karakter kedua di set satu akan digantikan oleh karakter kedua di set dua, dan seterusnya.

Contoh ini akan mencari huruf “c” di input stream ke tr , dan mengganti setiap kejadian dengan huruf “z.” Perhatikan bahwa tr peka terhadap huruf besar-kecil.

Kami menggunakan echo untuk mendorong beberapa teks ke tr .

 gema abcdefabc | tr 'c' 'z' 

Mengganti satu karakter dengan tr

Semua kemunculan "c" diganti dengan "z" dan string baru ditulis ke jendela terminal.

Kali ini kita akan mencari dua huruf, “a” dan “c.” Perhatikan bahwa kami tidak mencari "ac." Kami mencari "a", lalu mencari "c". Kita akan mengganti kemunculan "a" dengan "x" dan kemunculan "c" dengan "z".

 gema abcdefabc | tr 'ac' 'xz' 

Menghapus dua huruf dengan tr

Agar ini berfungsi, Anda harus memiliki jumlah karakter yang sama di kedua set. Jika tidak, Anda akan mendapatkan perilaku yang dapat diprediksi, tetapi mungkin tidak diinginkan.

 gema 'panggil aku Ismael.' | tr 'abcdjklm' '123' 

Menggunakan kumpulan karakter yang tidak seimbang dengan tr

Ada lebih banyak karakter di set satu daripada di set dua. Huruf "d" hingga "m" tidak memiliki karakter yang sesuai di set dua. Mereka masih akan diganti, tetapi semuanya diganti dengan karakter terakhir di set dua.

Mungkin saja ini berguna dalam beberapa kasus, tetapi jika Anda ingin mencegahnya, Anda dapat menggunakan opsi -t (truncate). Ini hanya menggantikan karakter yang terdapat di set satu yang memiliki karakter yang cocok di set dua.

 gema 'panggil aku Ismael.' | tr -t 'abcdjklm' '123' 

Menggunakan kumpulan karakter yang tidak seimbang dengan tr dengan opsi truncate

Menggunakan Rentang dan Token

Tetapkan satu dan tetapkan dua dapat berisi rentang karakter. Misalnya, [az] mewakili semua huruf kecil, dan [AZ] mewakili semua huruf besar. Kita dapat menggunakan ini untuk mengubah aliran teks.

Ini akan mengonversi aliran input menjadi huruf besar.

 gema "How-To Geek" | tr '[az]' '[AZ]' 

Menggunakan rentang karakter untuk mengubah string menjadi huruf besar

Untuk membalik kasing ke arah lain, kita dapat menggunakan perintah yang sama tetapi dengan rentang huruf besar dan kecil ditukar pada baris perintah.

 gema "How-To Geek" | tr '[AZ]' '[az]' 

Menggunakan rentang karakter untuk mengubah string menjadi huruf kecil

Ada token yang dapat kita gunakan untuk beberapa kasus umum yang mungkin ingin kita cocokkan.

  • [:alnum:] : Huruf dan angka.
  • [:alpha:] : Hanya huruf.
  • [:digit:] : Digit saja.
  • [:blank:] : Tab dan spasi.
  • [:spasi:] : Semua spasi kosong, termasuk karakter baris baru.
  • [:graph:] : Semua karakter termasuk simbol, tapi bukan spasi.
  • [:print:] : Semua karakter termasuk simbol, termasuk spasi.
  • [:punct:] : Semua karakter tanda baca.
  • [:lower:] : Huruf kecil.
  • [:upper:] : Huruf besar.

Kita dapat melakukan konversi huruf kecil ke huruf besar dan huruf besar ke huruf kecil dengan mudah, menggunakan token.

 gema "How-To Geek" | tr '[:bawah:]' '[:atas:]'
 gema "How-To Geek" | tr '[:atas:]' '[:bawah:]' 

Menggunakan token untuk mengubah kasus string teks

Membalikkan Pertandingan

Opsi -c (pelengkap) cocok dengan semua karakter selain yang ada di set pertama. Perintah ini mengubah semuanya selain huruf "c" menjadi tanda hubung " - ".

 gema abcdefc | tr -c 'c' '-' 

Mengganti semua kecuali karakter yang ditentukan dengan karakter lain

Perintah ini menambahkan huruf "a" ke set pertama. Apa pun selain "a" atau "c" diubah menjadi karakter tanda hubung " - ".

 gema abcdefc | tr -c 'ac' '-' 

Mengganti semua kecuali beberapa karakter yang ditentukan dengan karakter lain

Menghapus dan Meremas Karakter

Kita dapat menggunakan tr untuk menghapus karakter sekaligus, tanpa penggantian apa pun.

Perintah ini menggunakan opsi -d (hapus) untuk menghapus kemunculan "a", "d", atau "f" dari input stream.

 gema abcdefc | tr -d 'adf' 

Menghapus banyak karakter dari string teks dengan tr

Ini adalah salah satu contoh di mana kita hanya memiliki satu set karakter pada baris perintah, bukan dua.

Lain adalah ketika kita menggunakan opsi -s (squeeze-repeats). Opsi ini mengurangi karakter berulang menjadi satu karakter.

Contoh ini akan mengurangi urutan pengulangan karakter spasi menjadi satu spasi.

 gema "abc de fc" | tr -s '[:kosong:]' 

Mengubah urutan karakter yang berulang menjadi satu kemunculan karakter, dengan tr

Agak membingungkan bahwa token [:blank:] mewakili karakter spasi, dan token [:space:] mewakili semua bentuk spasi, termasuk tab dan karakter baris baru.

Dalam hal ini, kita dapat mengganti [:blank:] dengan [:space:] dan mendapatkan hasil yang sama.

 gema "abc de fc" | tr -s '[:ruang:]' 

Mengubah urutan karakter yang berulang menjadi satu kemunculan karakter, dengan tr

Menghapus Karakter

Perbedaan antara [:blank:] dan [:space:] menjadi jelas saat kita menghapus karakter. Untuk melakukan ini, kami menggunakan opsi -d (delete), dan menyediakan sekumpulan karakter yang akan dicari tr dalam input stream-nya. Apa pun yang ditemukannya akan dihapus.

 gema "abc de fc" | tr -d '[:kosong:]' 

Menghapus blank (karakter spasi) dari string teks, dengan tr

Spasi dihapus. Perhatikan bahwa kami mendapatkan baris baru setelah aliran keluaran ditulis di jendela terminal. Jika kita mengulangi perintah itu dan menggunakan [:space:] alih-alih kosong, kita akan mendapatkan hasil yang berbeda.

 gema "abc de fc" | tr -d '[:kosong:]' 

Menghapus spasi putih dari string teks, dengan tr

Kali ini kita tidak memulai baris baru setelah output, command prompt ditabrak tepat di atasnya. Ini karena [:space:] menyertakan baris baru. Spasi, tab, dan karakter baris baru apa pun akan dihapus dari aliran input.

Tentu saja, Anda juga dapat menggunakan karakter luar angkasa yang sebenarnya.

 gema "abc de fc" | tr -d '' 

Menghapus spasi dari string teks, dengan menentukan karakter spasi, dengan tr

Kita dapat dengan mudah menghapus digit.

 gema abcd123efg | tr -d '[:angka:]' 

Menghapus digit dari string teks dengan tr

Dengan menggabungkan opsi -c (pelengkap) dan -d (hapus) kita dapat menghapus semuanya selain digit.

 gema abcd123efg | tr -cd '[:digit:]' 

Menghapus semuanya selain digit dari string teks menggunakan tr

Perhatikan bahwa segala sesuatu selain angka berarti semua huruf, dan semua spasi, jadi sekali lagi kita kehilangan baris baru terminasi.

Menggabungkan dan Memisahkan Garis

Jika kita mengganti karakter baris baru dengan spasi, kita dapat membagi baris teks dan menempatkan setiap kata pada barisnya sendiri.

 gema 'satu dua tiga empat' | tr ' ' '\n' 

Memisahkan satu baris teks menjadi satu kata per baris, dengan tr

Kita juga bisa mengubah pembatas yang memisahkan kata. Perintah ini menggantikan titik dua ” : ” untuk spasi.

 gema 'satu dua tiga empat' | tr ' ' ':' 

Mengubah pembatas kata dari spasi menjadi titik dua, dengan tr

Kita dapat menemukan pembatas apa pun yang digunakan, dan menggantinya dengan karakter baris baru, memisahkan teks yang sulit dibaca menjadi keluaran yang lebih mudah dikelola.

Variabel lingkungan jalur adalah string panjang dari banyak jalur direktori. Tanda titik dua ” : ” memisahkan setiap jalur. Kami akan mengubahnya menjadi karakter baris baru.

 gema $PATH
 gema $PATH | tr ":" "\n" 

Memisahkan variabel lingkungan $PATH menjadi jalur direktori terpisah, satu per baris, dengan tr

Itu jauh lebih mudah untuk diuraikan secara visual.

Jika kami memiliki keluaran yang ingin kami format ulang menjadi satu baris, kami juga dapat melakukannya. File “lines.txt” berisi beberapa teks, dengan satu kata di setiap baris. Kami akan memasukkannya ke dalam tr dan mengubahnya menjadi satu baris.

 file kucing.txt
 garis kucing.txt | tr '\n' ' ' 

Menggabungkan input multi-baris menjadi satu baris teks, menggunakan tr

Menggunakan tr Dengan Pipa

Kita dapat menggunakan keluaran dari tr sebagai masukan untuk program lain, atau bahkan untuk tr itu sendiri.

Perintah ini menggunakan tr empat kali.

  • tr pertama menghapus semua tanda hubung “-” dari input.
  • tr kedua meremas setiap ruang berulang menjadi ruang tunggal.
  • tr ketiga menggantikan spasi dengan karakter garis bawah “_”.
  • tr keempat dan terakhir mengubah string menjadi huruf kecil.
 gema "File Hancur-nAMe.txt" | tr -d '-' | tr -s ' ' | tr' ''_' | tr '[:atas:]' '[:bawah:]' 

Sebuah pipa dari empat contoh tr

TERKAIT: Cara Menggunakan Pipa di Linux

Sederhana Adalah Sederhana

Perintah tr bagus karena sederhana. Tidak banyak yang bisa dipelajari atau diingat. Tapi kesederhanaannya bisa menjadi kejatuhannya juga.

Jangan salah, sering kali Anda akan menemukan bahwa tr memungkinkan Anda melakukan apa yang Anda butuhkan tanpa harus menggunakan alat yang lebih rumit seperti sed .

Cara Menggunakan Perintah sed di Linux
TERKAIT Cara Menggunakan Perintah sed di Linux

Namun, jika Anda berjuang untuk melakukan sesuatu dengan tr , dan Anda menemukan diri Anda membangun rantai perintah yang panjang, Anda mungkin harus menggunakan sed .