Cara Menggunakan Perintah tr Linux
Diterbitkan: 2023-05-17Apakah 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.
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'
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'
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'
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 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]'
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]'
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:]'
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' '-'
Perintah ini menambahkan huruf "a" ke set pertama. Apa pun selain "a" atau "c" diubah menjadi karakter tanda hubung " -
".
gema abcdefc | tr -c 'ac' '-'
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'
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:]'
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:]'
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:]'
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:]'
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 ''
Kita dapat dengan mudah menghapus digit.
gema abcd123efg | tr -d '[:angka:]'
Dengan menggabungkan opsi -c
(pelengkap) dan -d
(hapus) kita dapat menghapus semuanya selain digit.
gema abcd123efg | tr -cd '[:digit:]'
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'
Kita juga bisa mengubah pembatas yang memisahkan kata. Perintah ini menggantikan titik dua ” :
” untuk spasi.
gema 'satu dua tiga empat' | 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"
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' ' '
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:]'
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
.
Namun, jika Anda berjuang untuk melakukan sesuatu dengan tr
, dan Anda menemukan diri Anda membangun rantai perintah yang panjang, Anda mungkin harus menggunakan sed
.