Θέλω να σας πω για ένα βοηθητικό πρόγραμμα αναζήτησης που απλοποιεί πολύ τη ζωή. Όταν φτάνω στον διακομιστή και πρέπει να ψάξω για κάτι, το πρώτο πράγμα που κάνω είναι να ελέγξω αν το ack είναι εγκατεστημένο. Αυτό το βοηθητικό πρόγραμμα είναι μια εξαιρετική αντικατάσταση για το grep, καθώς και για το find και το wc σε κάποιο βαθμό. Γιατί όχι grep; Το Ack έχει καλύτερες ρυθμίσεις από το κουτί, περισσότερες αναγνώσιμες από τον άνθρωπο επιλογές, perl regex και σύστημα διαμόρφωσης. Αν σας αρέσει (πρέπει να) κάνετε αναζήτηση μέσω του τερματικού, τότε πρέπει οπωσδήποτε να το δοκιμάσετε.
Βασικά χαρακτηριστικά
Το Ack είναι αναδρομικό από προεπιλογή και η εγγραφή λιγότερων επιλογών είναι πάντα καλή ιδέα.
Μπορούμε να χρησιμοποιήσουμε μια σημαία -wγια να πούμε στο βοηθητικό πρόγραμμα να αναζητήσει ένα παράδειγμα του μοτίβου μας που περιβάλλεται από όρια λέξεων (κενός χώρος, κάθετες κ.λπ.).
ack -w mysql
Το Ack υποστηρίζει την αναζήτηση κατά τύπο αρχείου. Για παράδειγμα, ας βρούμε την έκδοση της ενότητας σε αρχεία json.
ack --json '"version":s+"d+.d+.d+"'
Μια πλήρης λίστα των υποστηριζόμενων τύπων αρχείων μπορεί να προβληθεί χρησιμοποιώντας:
ack --help-types
Συχνά χρειάζεται να μετράτε πόσες φορές εμφανίζεται μια φράση σε ένα αρχείο καταγραφής, για παράδειγμα, για να κατανοήσετε πόσα δεδομένα επεξεργάστηκε το σενάριο.
Μετράμε πόσες φορές συμβαίνει η διαδικασία στο αρχείο test.log, χωρίς να λαμβάνεται υπόψη η περίπτωση (-i).
Μπορούμε να μετρήσουμε τα περιστατικά όχι μόνο σε ένα συγκεκριμένο αρχείο, αλλά σε μια ομάδα. Ας ολοκληρώσουμε την προηγούμενη αναζήτηση για τη λέξη mysql: μετρήστε τον αριθμό των εμφανίσεων των λέξεων (-Με) σε αρχεία *.js(--js), εξαιρουμένων των αρχείων στα οποία δεν βρέθηκε τίποτα (-h) και συνοψίζοντας το αποτέλεσμα.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Επιπλέον, μπορούμε να λάβουμε μια λεπτομερή αναφορά για τον αριθμό των εμφανίσεων σε κάθε αρχείο χρησιμοποιώντας (-l)
ack --js -w -cl mysql
Εάν χρειάζεστε επιπλέον πλαίσιο για την αναζήτησή σας, μπορείτε να ζητήσετε αποδοχή
εμφάνιση γραμμών έως (-B) και μετά (-A) της έκφρασης που βρέθηκε. Για να το κάνετε αυτό, πρέπει να καθορίσετε μετά την επιλογή τον αριθμό των γραμμών που πρέπει να εμφανίζονται.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
Και αν χρειάζεστε και τα δύο, χρησιμοποιήστε (-ΑΠΟ)
ack --js --column -C 2 "query.once('" ./lib/
Υπάρχει επίσης μια επιλογή (-v) για να αντιστρέψετε την αναζήτηση, δηλαδή να εμφανίσετε γραμμές που δεν περιέχουν ένα δεδομένο μοτίβο.
Κοινή έκφραση
Το Ack, σε αντίθεση με το grep, χρησιμοποιεί εκφράσεις συμβατές με Perl.
Για μένα αυτό είναι ένα μεγάλο πλεονέκτημα· δεν χρειάζεται να θυμάμαι ξεχωριστή σύνταξη για κανονικές εκφράσεις.
ack 'vars+adds+'
Πιο περίπλοκο παράδειγμα
ack '*s+[vd+.d+.d+]'
Συχνά θέλετε να αφήσετε στα αποτελέσματα μόνο ό,τι ταιριάζει με το πρότυπο. Η επιλογή --output θα βοηθήσει εδώ (-o)
ack -o '*s+[vd+.d+.d+]'
Επιπλέον, χρησιμοποιώντας παρενθέσεις μπορούμε να επιλέξουμε το τμήμα που βρέθηκε και να αποκτήσουμε πρόσβαση σε αυτό στην έξοδο μέσω της μεταβλητής $[group number]. Για παράδειγμα,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Το Ack έχει χρήσιμες επιλογές --εύρος-εκκίνηση и --εύρος-άκρο. Βοηθούν όταν
Τα δεδομένα αποθηκεύονται όχι σε μία γραμμή, αλλά σε μορφή πολλαπλών γραμμών.
Για παράδειγμα, υπάρχει ένα αρχείο με κώδικα sql
Ας εξαγάγουμε τα ονόματα των στηλών. Η αρχή του μπλοκ θα είναι μια γραμμή που ξεκινά με SELECT και το τέλος θα είναι μια γραμμή που ξεκινά με FROM.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Εάν η έκφραση αναζήτησης περιέχει ειδικούς χαρακτήρες όπως τελεία, παρένθεση και άλλους, τότε για να μην διαφύγετε από αυτούς χρησιμοποιώντας , μπορείτε να χρησιμοποιήσετε την επιλογή -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Εργασία με αρχεία
Λάβετε μια λίστα αρχείων με συγκεκριμένη επέκταση
ack -f --js
Βρείτε όλα τα αρχεία js των οποίων το όνομα αρχίζει με P* χρησιμοποιώντας την επιλογή (-g).
ack -g --js '/Pa.+.js$'
Διαμόρφωση
Το βοηθητικό πρόγραμμα έχει το δικό του αρχείο διαμόρφωσης. Μπορείτε να έχετε και μια καθολική διαμόρφωση για τον χρήστη (~/.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