Juga dikenal sebagai reverse cat, tac utilitas baris perintah sederhana yang memungkinkan Anda membalikkan baris dalam output menggunakan | operator pipa bawaan dan tac. Artinya, jika Anda memiliki perintah, sisi kiri (lhs), dan ingin membalik isi outputnya, yang akan Anda lakukan hanyalah mengetik lhs | tac. Itu dia!
Memang, ada lebih banyak hal yang harus diperhatikan daripada yang terlihat. Jangan khawatir. Kami akan membahas semuanya, dalam waktu yang tepat.
Saran tentang tac
Untuk menggunakan atau tidak menggunakan, itulah pertanyaannya. Anda tidak akan Anda tidak ingin tac ketika Anda tidak harus. Namun, jika Anda ingin mengoleskan tac sebagai perintah roti dan mentega, itu terserah Anda. Sementara itu, inilah saran saya untuk mengambil kedua belah pihak agar tetap netral.
Kapan harus menggunakan tac
Ada kalanya menggunakan tac yang membantu Anda mendapatkan lebih banyak baris perintah dengan lebih sedikit kode dan waktu yang dihabiskan untuk meneliti opsi perintah lhs.
Bila Anda tidak yakin tentang pilihan lhs
Banyak perintah seperti sort datang dengan opsi untuk membalikkan output dari suatu perintah. Namun, jika Anda tidak yakin apakah perintah di sisi kiri memiliki opsi -r untuk membalikkan keluaran, menggunakan tac adalah cara pasti untuk membalikkan jalur keluaran.
Ketika kinerja tidak penting
Meskipun tidak signifikan, sebagian besar perintah yang digunakan bersama dengan opsi bawaan untuk membalikkan output berkinerja lebih baik daripada menyalurkan output ke tac. Jadi, jika sedikit kelambatan kinerja tidak menjadi masalah, menyalurkan ke tac untuk memutar ulang output secara terbalik tidak apa-apa.
Kapan tidak menggunakan tac
Ada kalanya Anda mungkin tidak menggunakan tac karena Anda lebih tahu. Berikut adalah beberapa yang perlu diperhatikan.
Ketika Anda tahu perintah pada lhs memiliki opsi untuk membalikkan jalur output
Seperti yang saya katakan, “Sebagian besar perintah datang dengan opsi untuk membalikkan output.” Jika Anda tahu bahwa perintah lhs tertentu memiliki opsi, Anda tidak boleh menggunakan tac. Lagi pula, -r lebih pendek dari - | tac.
Ketika kinerja penting
Seperti yang saya katakan, “Menggunakan opsi lhs reverse mungkin berkinerja lebih baik daripada tac.Jika Anda ingin memeras beberapa detik dalam skrip bash atau berurusan dengan file yang lebih besar yang memerlukan waktu untuk membaca, Anda tidak boleh menggunakan tac.
Bantuan tc
Menjalankan perintah bantuan untuk tac atau man tac menunjukkan penggunaan bersama dengan opsi yang dapat digunakan. Inilah yang diharapkan.
Perintah
tc --helpKeluaran
Versi Tac
aku versi berapa?
Kamu adalah versi terbaru dari dirimu sendiri. Namun, dalam hal versi tac Anda, ada opsi untuk itu.
Perintah
tac --versiKeluaran
Catatan
Jika Anda menggunakan tac di FreeBSD atau macOS, opsi panjang untuk versi mungkin tidak tersedia. Dalam hal ini, coba -v atau man tac. Jika Anda sudah mencobanya beri tahu saya. saya penasaran. Terima kasih
Pilihan Tak
Selain bantuan dan versi, tac tidak memiliki banyak opsi. Untuk apa yang dimilikinya, Anda pasti akan mengetahui bahwa tac bukan sembarang kucing terbalik tua.
Tac sebelum opsi
Opsi -b memungkinkan Anda untuk mengubah cara pemisah dipasang pada output. Secara default, pemisah baris baru dilampirkan setelah setiap baris.
Saya tahu ini membingungkan. Mari kita uraikan dengan contoh.
Pertama, mari kita lihat seperti apa output kita sebelum menggunakan tac -b.
Perintah
seq 10Keluaran
Sekarang mari kita lihat seperti apa output kita setelah menggunakan tac tanpa -b.
Perintah
barisan 10 | tacKeluaran
Sekarang mari kita lihat seperti apa outputnya menggunakan tac -b.
Perintah
barisan 10 | tac -bKeluaran
Opsi pemisah tac
Opsi pemisah -s 'literal string' memungkinkan Anda menentukan karakter atau urutan karakter yang digunakan oleh tac untuk membedakan garis. Secara default, karakter baris baru ('0a' dalam hex) digunakan.
Cara menggunakan opsi pemisah tac tidak jelas pada awalnya. Namun, begitu Anda tahu itu ada, sulit untuk tidak mencoba menggunakannya.
Perhatikan contoh berikut, beroperasi pada garis yang direpresentasikan dalam hex.
Perintah
barisan 20 | xxd -ps | tac -s '0a' | xxd -ps -rKeluaran
Catatan
(1) Ini mungkin tampak sepele seperti menggunakan seq 20 | perintah tac, namun, dalam hal ini, kami tidak menghabiskan waktu mengerjakan aliran keluaran dalam hex. Menggunakan pola ini berguna ketika pemisahan bukanlah sesuatu yang sepele seperti karakter baris baru seperti byte ke-nol.
Sekarang kurangi mencoba menggunakan tac pada sesuatu yang sedikit kurang mentah dan lebih banyak meta seperti HTML sederhana.
Perhatikan file berikut.
Mengajukan
SEBUAHB
C
Perintah
file() echo -e " AB
C
" ;
berkas | tac -s"
"
Keluaran
Kami berhasil mengonversi halaman HTML
SEBUAHB
C
ke
CB
SEBUAH
menggunakan tac.
Misalkan Anda perlu melakukan sesuatu yang sedikit lebih rumit seperti memperlakukan tag apa pun sebagai pemisah tac. Dalam hal ini, Anda tidak akan lolos hanya dengan menggunakan opsi pemisah saja. Di situlah opsi regex masuk. Dikombinasikan dengan opsi pemisah, ini memungkinkan Anda melakukan lebih banyak dengan perintah tac daripada membalikkan baris dalam file a. Begini caranya.
Opsi regex tac
Opsi regex -r -s 'regex' memungkinkan Anda menentukan bahwa string pemisah akan diperlakukan sebagai ekspresi reguler.
Cara menggunakan opsi tac regex sesederhana menambahkan opsi -r sebelum atau sesudah pemisah.
Pertimbangkan contoh sebelumnya menggunakan opsi regex bersama dengan opsi pemisah. Mari kita memperlakukan tag markup apa pun sebagai pemisah.
Mengajukan
fungsi sederhana
Fungsinya sederhana di bash. Setidaknya yang ini. Ini menempatkan string di layar.
Perintah
fungsi sederhana
()
gema
sesederhana itu fungsi sederhana
Sumber: https://temptemp3.github.io/bash-fungsi
Perintah
berkas ()gema '
fungsi sederhana
Fungsinya sederhana di bash. Setidaknya yang ini. Ini menempatkan
tali di layar.
Perintah
fungsi sederhana
()
gema sesederhana itu
fungsi sederhana
berkas | tac -r -s "]*."
Keluaran
Kami berhasil mengonversi halaman HTML dengan membalikkan file menggunakan tag HTML. Jika Anda melihat detailnya, Anda akan melihat bahwa itu belum sempurna.
Perintah tac dalam bash murni
Berikut adalah versi primitif dari implementasi tac dalam bash murni yang membalikkan garis yang disalurkan oleh perintah lhs. Versi masa depan dibiarkan sebagai latihan.
#!/bin/bash## tac
## versi 0.0.1 - inisial
#############################################################
tak()
lokal -a arr
lokal -i i
mapfile arr -
i="$#arr[@]"
sementara [ $i -ge 0 ]
melakukan
gema $arr[i]
biarkan aku-=1
selesai
#############################################################
tac
#############################################################
Sumber: https://github.com/temptemp3/ba.sh/gumpalan/master/tac.SH
Perintah tac menggunakan perintah lain
Berikut adalah beberapa versi primitif dari implementasi tac menggunakan perintah lain yang membalikkan garis yang disalurkan oleh perintah lhs. Versi masa depan dibiarkan sebagai latihan.
Sebelum kita mulai, tutup mata Anda dan pikirkan, “Apa yang bisa digunakan untuk mengimplementasikan tac versi primitif??”
Banyak perintah muncul di benak saya, tetapi saya akan fokus pada perintah yang kami punya ruang untuk.
melongo
Mirip dengan perintah Tac dalam contoh bash murni, untuk mengimplementasikan tac pertama-tama kita akan menyimpan baris baca untuk diputar ulang secara terbalik setelah semua baris dibaca. Begini tampilannya menggunakan gawk.
melongo ' baris[++baris[0]]=$(0) END untuk(i=0;i
Sekarang coba gunakan pada perintah lhs seq 10.
barisan 10 | gawk ' baris[++baris[0]]=$(0) END untuk(i=0;i
Seperti yang Anda harapkan hasilnya adalah
Latihan
1. Fungsi lhs() seq 10 ; daftar bilangan bulat 1 sampai 10. Tuliskan perintah rhs sedemikian rupa sehingga lhs | rhs sama dengan 10864213579 hanya menggunakan tac (Petunjuk: lihat Tac sebelum contoh opsi)
2. Membalikkan output dari rhs() find -mindepth 1 -maxdepth 1 -print0 ; menggunakan tac (Petunjuk: lihat contoh opsi pemisah Tac)
3. Perpanjang tac.sh (dalam perintah Tac dalam bash murni) untuk berperilaku persis seperti tac. Anda perlu menambahkan opsi dan pastikan untuk menguji perilaku mereka.
4. Terapkan versi primitif tac dalam bash murni sebagai fungsi rekursif.
TL;DR
Sekali lagi, saya senang menulis perintah Bash tac. Setelah membaca, saya harap Anda dapat menyetujui bahwa ada lebih banyak hal yang harus dilakukan daripada yang Anda pikirkan. Juga, setelah mencoba melakukan hal-hal dengan cara yang sulit di dekat bagian bawah, saya harap Anda tahu betapa bergunanya perintah tac. Jika ada yang berhasil menyelesaikan salah satu latihan atau membutuhkan bantuan untuk pekerjaan rumahnya, beri tahu saya me. Terima kasih,