Ik wil je vertellen over één zoekhulpprogramma dat het leven enorm vereenvoudigt. Als ik bij de server kom en ik moet naar iets zoeken, controleer dan eerst of ack is geïnstalleerd. Dit hulpprogramma is tot op zekere hoogte een uitstekende vervanging voor grep, en ook voor find en wc. Waarom niet grep? Ack heeft mooiere standaardinstellingen, meer door mensen leesbare opties, perl regex en een configuratiesysteem. Als je het leuk vindt (moet) zoeken in de terminal, dan moet je het zeker eens proberen.
Basis kenmerken
Ack is standaard recursief en het schrijven van minder opties is altijd een goed idee.
We kunnen een vlag gebruiken -wom het hulpprogramma te vertellen dat het moet zoeken naar een exemplaar van ons patroon omgeven door woordgrenzen (witruimte, schuine strepen, enz.).
ack -w mysql
Ack ondersteunt zoeken op bestandstype. Laten we bijvoorbeeld de moduleversie in json-bestanden zoeken.
ack --json '"version":s+"d+.d+.d+"'
Een volledige lijst met ondersteunde bestandstypen kan worden bekeken met behulp van:
ack --help-types
Vaak moet u tellen hoe vaak een zin in een logbestand voorkomt, om bijvoorbeeld te begrijpen hoeveel gegevens het script heeft verwerkt.
We tellen hoe vaak het proces plaatsvindt in het test.log-bestand, zonder rekening te houden met case (-i).
We kunnen gebeurtenissen niet alleen in één specifiek bestand tellen, maar ook in een groep. Laten we de vorige zoekopdracht naar het woord mysql afronden: tel het aantal keren dat woorden voorkomen (-van) in *.js-bestanden(--js), met uitzondering van bestanden waarin niets is gevonden (-h) en het resultaat samenvatten.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Bovendien kunnen we een gedetailleerd rapport krijgen over het aantal keren dat elk bestand voorkomt met behulp van (-l)
ack --js -w -cl mysql
Als u extra context nodig heeft voor uw zoekopdracht, kunt u ar vragen
toon regels tot (-B) en daarna (-A) van de gevonden uitdrukking. Om dit te doen, moet u achter de optie het aantal regels opgeven dat moet worden weergegeven.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
En als je beide nodig hebt, gebruik dan (-C)
ack --js --column -C 2 "query.once('" ./lib/
Er is ook een optie (-v) om de zoekopdracht om te keren, d.w.z. lijnen tonen die geen bepaald patroon bevatten.
Reguliere expressie
Ack gebruikt, in tegenstelling tot grep, Perl-compatibele expressies.
Voor mij is dit een groot pluspunt; ik hoef geen aparte syntaxis voor reguliere expressies te onthouden.
ack 'vars+adds+'
Complexer voorbeeld
ack '*s+[vd+.d+.d+]'
Vaak wilt u alleen in de resultaten laten staan wat overeenkomt met de sjabloon. De --output optie zal hier helpen (-o)
ack -o '*s+[vd+.d+.d+]'
Bovendien kunnen we met behulp van haakjes het gevonden onderdeel selecteren en er toegang toe krijgen in de uitvoer via de variabele $[groepsnummer]. Bijvoorbeeld,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Ack heeft handige opties --bereik-start и --bereik-einde. Ze helpen wanneer
De gegevens worden niet op één regel, maar in meerregelige vorm opgeslagen.
Er is bijvoorbeeld een bestand met sql-code
Laten we de kolomnamen extraheren. Het begin van het blok is een regel die begint met SELECT, en het einde is een regel die begint met FROM.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Als de zoekuitdrukking speciale tekens bevat, zoals een punt, een haakje en andere, kunt u de optie gebruiken om ze niet te omzeilen met behulp van . -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Werken met bestanden
Ontvang een lijst met bestanden met een specifieke extensie
ack -f --js
Vind alle js-bestanden waarvan de naam begint met P* met behulp van de optie (-g).
ack -g --js '/Pa.+.js$'
Configuratie
Het hulpprogramma heeft een eigen configuratiebestand. U kunt zowel een globale configuratie voor de gebruiker (~/.ackrc) als een lokale configuratie voor een specifieke map hebben (u moet een .ackrc-bestand in de map maken).
De meeste opties die in de configuraties zijn geschreven, kunnen handmatig worden opgegeven wanneer ze worden aangeroepen. Laten we er een paar bekijken.
Negeer de map tijdens het zoeken
--ignore-dir=dist
Laten we een aangepast bestandstype -vue toevoegen.
--type-add=vue:ext:js,vue
Nu kunt u de optie --vue gebruiken om bestanden te zoeken .vue. Bijvoorbeeld: ack --vue-app.
U kunt voor deze optie een lijst met extensies opgeven. Als u hier bijvoorbeeld -vue gebruikt, wordt het volgende verwerkt: .js-bestanden.
Negeer bestanden, bijvoorbeeld verkleinde *.min.js
--ignore-file=match:/.min.js$/
installatie
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
Installatie vanaf de locatie
curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack
Plug-ins voor editors:
Conclusie
Dit zijn niet alle mogelijkheden. De volledige lijst met functies kan worden bekeken door het volgende uit te voeren:
ack –-help
# или
ack --man
Met het ack-hulpprogramma kunt u het zoeken in de terminal handiger en flexibeler maken. En met behulp van pijplijn (ack -C 10 hallo | aak wereld) kunt u een krachtige combinatie maken voor het zoeken en filteren van gegevens in het bestandssysteem en in de bestanden zelf.
Bron: www.habr.com