Saya ingin memberi tahu Anda tentang salah satu utilitas pencarian yang sangat menyederhanakan hidup. Ketika saya masuk ke server dan saya perlu mencari sesuatu, hal pertama yang saya lakukan adalah memeriksa apakah ack sudah diinstal. Utilitas ini merupakan pengganti yang sangat baik untuk grep, serta find dan wc sampai batas tertentu. Mengapa tidak mengerti? Ack memiliki pengaturan yang lebih bagus, opsi yang lebih mudah dibaca manusia, perl regex dan sistem konfigurasi. Jika Anda suka (harus) mencari melalui terminal, Anda harus mencobanya.
Fitur dasar
Ack bersifat rekursif secara default, dan menulis lebih sedikit opsi selalu merupakan ide bagus.
Kita bisa menggunakan bendera -wuntuk memberitahu utilitas untuk mencari contoh pola kita yang dikelilingi oleh batas kata (spasi, garis miring, dll.).
ack -w mysql
Ack mendukung pencarian berdasarkan jenis file. Misalnya, cari versi modul di file json.
ack --json '"version":s+"d+.d+.d+"'
Daftar lengkap jenis file yang didukung dapat dilihat menggunakan:
ack --help-types
Seringkali Anda perlu menghitung berapa kali sebuah frase muncul dalam file log, misalnya, untuk memahami berapa banyak data yang diproses skrip.
Kami menghitung berapa kali proses terjadi pada file test.log, tidak memperhitungkan kasus (-i).
Kita dapat menghitung kejadian tidak hanya dalam satu file tertentu, tetapi dalam satu grup. Mari kita selesaikan pencarian kata mysql sebelumnya: hitung jumlah kemunculan kata (-dari) di file *.js(--js), tidak termasuk file yang tidak ditemukan apa pun (-h) dan menyimpulkan hasilnya.
# Π²ΡΠ²Π΅Π΄Π΅ΠΌ Π½Π° ΡΠΊΡΠ°Π½ Π²ΡΠ΅ Π²Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ
ack --js -w mysql
# ΡΡΠΈΡΠ°Π΅ΠΌ ΠΎΠ±ΡΡΡ ΡΡΠΌΠΌΡ Π²Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ
ack --js -wch mysql
Selain itu, kita bisa mendapatkan laporan detail jumlah kemunculan di setiap file menggunakan (-l)
ack --js -w -cl mysql
Jika Anda memerlukan konteks tambahan untuk pencarian Anda, Anda dapat bertanya pada ack
tampilkan garis hingga (-B) dan kemudian (-A) dari ekspresi yang ditemukan. Untuk melakukan ini, Anda perlu menentukan setelah opsi jumlah baris yang perlu ditampilkan.
# 2 ΡΡΡΠΎΠΊΠΈ Π΄ΠΎ
ack --js --column -B 2 "query.once('" ./lib/
# 2 ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΡΠ»Π΅
ack --js --column -A 2 "query.once('" . /lib/
Dan jika Anda membutuhkan keduanya, gunakan (-DENGAN)
ack --js --column -C 2 "query.once('" ./lib/
Ada juga pilihan (-v) untuk membalikkan pencarian, yaitu menampilkan garis yang tidak mengandung pola tertentu.
Ekspresi reguler
Ack, tidak seperti grep, menggunakan ekspresi yang kompatibel dengan Perl.
Bagi saya ini merupakan nilai tambah yang besar; saya tidak perlu mengingat sintaks terpisah untuk ekspresi reguler.
ack 'vars+adds+'
Contoh yang lebih kompleks
ack '*s+[vd+.d+.d+]'
Seringkali Anda ingin meninggalkan hasil hanya yang cocok dengan template. Opsi --output akan membantu di sini (-o)
ack -o '*s+[vd+.d+.d+]'
Selain itu, dengan menggunakan tanda kurung kita dapat memilih bagian yang ditemukan dan mengaksesnya dalam output melalui variabel $[group number]. Misalnya,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Ack memiliki opsi yang berguna --rentang-mulai ΠΈ --rentang-akhir. Mereka membantu kapan
Data disimpan tidak dalam satu baris, melainkan dalam bentuk multi baris.
Misalnya ada file dengan kode sql
Mari kita ekstrak nama kolomnya. Awal blok akan menjadi garis yang dimulai dengan SELECT, dan akhir akan menjadi garis yang dimulai dengan FROM.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Jika ekspresi pencarian berisi karakter khusus seperti titik, tanda kurung, dan lain-lain, maka agar tidak menghindarinya menggunakan , Anda dapat menggunakan opsi -Q.
# ΠΠΎΠΈΡΠΊ Ρ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
ack --json 'mysql.'
# ΠΠΎΠΈΡΠΊ Π±Π΅Π· ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ack --json -Q mysql.
Bekerja dengan file
Dapatkan daftar file dengan ekstensi tertentu
ack -f --js
Temukan semua file js yang namanya dimulai dengan P* menggunakan opsi (-g).
ack -g --js '/Pa.+.js$'
Konfigurasi
Utilitas ini memiliki file konfigurasinya sendiri. Anda dapat memiliki konfigurasi global untuk pengguna (~/.ackrc) dan konfigurasi lokal untuk folder tertentu (Anda perlu membuat file .ackrc di folder tersebut).
Sebagian besar opsi yang tertulis dalam konfigurasi dapat ditentukan secara manual saat dipanggil. Mari kita lihat beberapa di antaranya.
Abaikan folder saat mencari
--ignore-dir=dist
Mari tambahkan jenis file khusus -vue.
--type-add=vue:ext:js,vue
Sekarang Anda dapat menggunakan opsi --vue untuk mencari file .vue. Misalnya: ack --vue Aplikasi.
Anda dapat menentukan daftar ekstensi untuk opsi ini. Misalnya, di sini, saat menggunakan -vue, hal berikut akan diproses: file .js.
Abaikan file, misalnya *.min.js yang diperkecil
--ignore-file=match:/.min.js$/
Instalasi
CentOS
yum update -y && yum install ack -y
Ubuntu
apt-get update -y && apt-get install ack-grep -y
Mac OS
brew update && brew install ack
Instalasi dari situs
curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack
Plugin untuk editor:
Kesimpulan
Ini bukanlah semua kemungkinannya. Daftar lengkap fungsi dapat dilihat dengan menjalankan:
ack β-help
# ΠΈΠ»ΠΈ
ack --man
Utilitas ack memungkinkan Anda membuat pencarian di terminal lebih nyaman dan fleksibel. Dan menggunakan pipa (ack -C 10 halo | dunia ack) Anda dapat membuat kombinasi yang kuat untuk mencari dan memfilter data di sistem file dan di file itu sendiri.
Sumber: www.habr.com