Ack lebih baik daripada grep

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 lebih baik daripada grep

Ack mendukung pencarian berdasarkan jenis file. Misalnya, cari versi modul di file json.

ack --json '"version":s+"d+.d+.d+"'

Ack lebih baik daripada grep

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.

Ack lebih baik daripada grep
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

Ack lebih baik daripada grep

Selain itu, kita bisa mendapatkan laporan detail jumlah kemunculan di setiap file menggunakan (-l)

ack --js -w -cl mysql

Ack lebih baik daripada grep

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/

Ack lebih baik daripada grep

# 2 строки послС 
ack --js --column -A 2 "query.once('" . /lib/

Ack lebih baik daripada grep

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+'

Ack lebih baik daripada grep

Contoh yang lebih kompleks

ack '*s+[vd+.d+.d+]'

Ack lebih baik daripada grep

Seringkali Anda ingin meninggalkan hasil hanya yang cocok dengan template. Opsi --output akan membantu di sini (-o)

ack -o '*s+[vd+.d+.d+]'

Ack lebih baik daripada grep

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 lebih baik daripada grep

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

Ack lebih baik daripada grep

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

Ack lebih baik daripada grep

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.

Ack lebih baik daripada grep

Bekerja dengan file

Dapatkan daftar file dengan ekstensi tertentu

ack -f --js

Ack lebih baik daripada grep

Temukan semua file js yang namanya dimulai dengan P* menggunakan opsi (-g).

ack -g --js '/Pa.+.js$'

Ack lebih baik daripada grep

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

Tambah komentar