Ο Ακ είναι καλύτερος από το grep

Θέλω να σας πω για ένα βοηθητικό πρόγραμμα αναζήτησης που απλοποιεί πολύ τη ζωή. Όταν φτάνω στον διακομιστή και πρέπει να ψάξω για κάτι, το πρώτο πράγμα που κάνω είναι να ελέγξω αν το ack είναι εγκατεστημένο. Αυτό το βοηθητικό πρόγραμμα είναι μια εξαιρετική αντικατάσταση για το grep, καθώς και για το find και το wc σε κάποιο βαθμό. Γιατί όχι grep; Το Ack έχει καλύτερες ρυθμίσεις από το κουτί, περισσότερες αναγνώσιμες από τον άνθρωπο επιλογές, perl regex και σύστημα διαμόρφωσης. Αν σας αρέσει (πρέπει να) κάνετε αναζήτηση μέσω του τερματικού, τότε πρέπει οπωσδήποτε να το δοκιμάσετε.

Βασικά χαρακτηριστικά

Το Ack είναι αναδρομικό από προεπιλογή και η εγγραφή λιγότερων επιλογών είναι πάντα καλή ιδέα.

Μπορούμε να χρησιμοποιήσουμε μια σημαία -wγια να πούμε στο βοηθητικό πρόγραμμα να αναζητήσει ένα παράδειγμα του μοτίβου μας που περιβάλλεται από όρια λέξεων (κενός χώρος, κάθετες κ.λπ.).

ack -w mysql

Ο Ακ είναι καλύτερος από το grep

Το Ack υποστηρίζει την αναζήτηση κατά τύπο αρχείου. Για παράδειγμα, ας βρούμε την έκδοση της ενότητας σε αρχεία json.

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

Ο Ακ είναι καλύτερος από το grep

Μια πλήρης λίστα των υποστηριζόμενων τύπων αρχείων μπορεί να προβληθεί χρησιμοποιώντας:

ack --help-types

Συχνά χρειάζεται να μετράτε πόσες φορές εμφανίζεται μια φράση σε ένα αρχείο καταγραφής, για παράδειγμα, για να κατανοήσετε πόσα δεδομένα επεξεργάστηκε το σενάριο.

Ο Ακ είναι καλύτερος από το grep
Μετράμε πόσες φορές συμβαίνει η διαδικασία στο αρχείο test.log, χωρίς να λαμβάνεται υπόψη η περίπτωση (-i).

Μπορούμε να μετρήσουμε τα περιστατικά όχι μόνο σε ένα συγκεκριμένο αρχείο, αλλά σε μια ομάδα. Ας ολοκληρώσουμε την προηγούμενη αναζήτηση για τη λέξη mysql: μετρήστε τον αριθμό των εμφανίσεων των λέξεων (-Με) σε αρχεία *.js(--js), εξαιρουμένων των αρχείων στα οποία δεν βρέθηκε τίποτα (-h) και συνοψίζοντας το αποτέλεσμα.

# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql

Ο Ακ είναι καλύτερος από το grep

Επιπλέον, μπορούμε να λάβουμε μια λεπτομερή αναφορά για τον αριθμό των εμφανίσεων σε κάθε αρχείο χρησιμοποιώντας (-l)

ack --js -w -cl mysql

Ο Ακ είναι καλύτερος από το grep

Εάν χρειάζεστε επιπλέον πλαίσιο για την αναζήτησή σας, μπορείτε να ζητήσετε αποδοχή
εμφάνιση γραμμών έως (-B) και μετά (-A) της έκφρασης που βρέθηκε. Για να το κάνετε αυτό, πρέπει να καθορίσετε μετά την επιλογή τον αριθμό των γραμμών που πρέπει να εμφανίζονται.

# 2 строки до 
ack --js --column -B 2 "query.once('" ./lib/

Ο Ακ είναι καλύτερος από το grep

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

Ο Ακ είναι καλύτερος από το grep

Και αν χρειάζεστε και τα δύο, χρησιμοποιήστε (-ΑΠΟ)

ack --js --column -C 2 "query.once('" ./lib/

Υπάρχει επίσης μια επιλογή (-v) για να αντιστρέψετε την αναζήτηση, δηλαδή να εμφανίσετε γραμμές που δεν περιέχουν ένα δεδομένο μοτίβο.

Κοινή έκφραση

Το Ack, σε αντίθεση με το grep, χρησιμοποιεί εκφράσεις συμβατές με Perl.
Για μένα αυτό είναι ένα μεγάλο πλεονέκτημα· δεν χρειάζεται να θυμάμαι ξεχωριστή σύνταξη για κανονικές εκφράσεις.

ack 'vars+adds+'

Ο Ακ είναι καλύτερος από το grep

Πιο περίπλοκο παράδειγμα

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

Ο Ακ είναι καλύτερος από το grep

Συχνά θέλετε να αφήσετε στα αποτελέσματα μόνο ό,τι ταιριάζει με το πρότυπο. Η επιλογή --output θα βοηθήσει εδώ (-o)

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

Ο Ακ είναι καλύτερος από το grep

Επιπλέον, χρησιμοποιώντας παρενθέσεις μπορούμε να επιλέξουμε το τμήμα που βρέθηκε και να αποκτήσουμε πρόσβαση σε αυτό στην έξοδο μέσω της μεταβλητής $[group number]. Για παράδειγμα,

ack --output='version is $1' '*s+[v(d+.d+.d+)]'

Ο Ακ είναι καλύτερος από το grep

Το Ack έχει χρήσιμες επιλογές --εύρος-εκκίνηση и --εύρος-άκρο. Βοηθούν όταν
Τα δεδομένα αποθηκεύονται όχι σε μία γραμμή, αλλά σε μορφή πολλαπλών γραμμών.

Για παράδειγμα, υπάρχει ένα αρχείο με κώδικα sql

Ο Ακ είναι καλύτερος από το grep

Ας εξαγάγουμε τα ονόματα των στηλών. Η αρχή του μπλοκ θα είναι μια γραμμή που ξεκινά με SELECT και το τέλος θα είναι μια γραμμή που ξεκινά με FROM.

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql

Ο Ακ είναι καλύτερος από το grep

Εάν η έκφραση αναζήτησης περιέχει ειδικούς χαρακτήρες όπως τελεία, παρένθεση και άλλους, τότε για να μην διαφύγετε από αυτούς χρησιμοποιώντας , μπορείτε να χρησιμοποιήσετε την επιλογή -Q.

# Поиск с экранированием 
ack --json 'mysql.'    
# Поиск без экранирования
ack --json -Q mysql.

Ο Ακ είναι καλύτερος από το grep

Εργασία με αρχεία

Λάβετε μια λίστα αρχείων με συγκεκριμένη επέκταση

ack -f --js

Ο Ακ είναι καλύτερος από το grep

Βρείτε όλα τα αρχεία js των οποίων το όνομα αρχίζει με P* χρησιμοποιώντας την επιλογή (-g).

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

Ο Ακ είναι καλύτερος από το grep

Διαμόρφωση

Το βοηθητικό πρόγραμμα έχει το δικό του αρχείο διαμόρφωσης. Μπορείτε να έχετε και μια καθολική διαμόρφωση για τον χρήστη (~/.ackrc) και μια τοπική για έναν συγκεκριμένο φάκελο (πρέπει να δημιουργήσετε ένα αρχείο .ackrc στο φάκελο).

Οι περισσότερες από τις επιλογές που είναι γραμμένες στις ρυθμίσεις παραμέτρων μπορούν να καθοριστούν με μη αυτόματο τρόπο κατά την κλήση. Ας δούμε μερικά από αυτά.

Παράβλεψη φακέλου κατά την αναζήτηση

--ignore-dir=dist

Ας προσθέσουμε έναν προσαρμοσμένο τύπο αρχείου -vue.

--type-add=vue:ext:js,vue

Τώρα μπορείτε να χρησιμοποιήσετε την επιλογή --vue για αναζήτηση αρχείων .vue. Για παράδειγμα: ack --vue App.
Μπορείτε να καθορίσετε μια λίστα επεκτάσεων για αυτήν την επιλογή. Για παράδειγμα, εδώ, όταν χρησιμοποιείτε το -vue, θα υποστούν επεξεργασία τα ακόλουθα:
αρχεία .js.

Αγνοήστε αρχεία, για παράδειγμα ελαχιστοποιημένα *.min.js

--ignore-file=match:/.min.js$/

Εγκατάσταση

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

Εγκατάσταση από τον ιστότοπο

curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack

Πρόσθετα για συντάκτες:

Συμπέρασμα

Δεν είναι όλες αυτές οι δυνατότητες. Μπορείτε να δείτε την πλήρη λίστα των λειτουργιών εκτελώντας:

ack –-help
# или
ack --man

Το βοηθητικό πρόγραμμα ack σάς επιτρέπει να κάνετε την αναζήτηση στο τερματικό πιο βολική και ευέλικτη. Και χρησιμοποιώντας αγωγό (ack -C 10 γεια | ack κόσμο) μπορείτε να δημιουργήσετε έναν ισχυρό συνδυασμό για αναζήτηση και φιλτράρισμα δεδομένων στο σύστημα αρχείων και στα ίδια τα αρχεία.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο