Chci vám říci o jednom vyhledávacím nástroji, který výrazně zjednodušuje život. Když se dostanu na server a potřebuji něco hledat, první věc, kterou udělám, je zkontrolovat, zda je nainstalováno ack. Tento nástroj je vynikající náhradou za grep, stejně jako find a wc do určité míry. Proč ne grep? Ack má hezčí nastavení hned po vybalení, více čitelných možností, regulární výraz perl a konfigurační systém. Pokud rádi (musíte) hledat v terminálu, pak byste to měli určitě vyzkoušet.
Základní vlastnosti
Ack je ve výchozím nastavení rekurzivní a psát méně možností je vždy dobrý nápad.
Můžeme použít vlajku -wříci nástroji, aby hledal instanci našeho vzoru obklopenou hranicemi slov (mezery, lomítka atd.).
ack -w mysql
Ack podporuje vyhledávání podle typu souboru. Najdeme například verzi modulu v souborech json.
ack --json '"version":s+"d+.d+.d+"'
Úplný seznam podporovaných typů souborů lze zobrazit pomocí:
ack --help-types
Často potřebujete spočítat, kolikrát se fráze objeví v souboru protokolu, například abyste pochopili, kolik dat skript zpracoval.
Počítáme, kolikrát se proces vyskytuje v souboru test.log, bez ohledu na velikost písmen (-i).
Můžeme počítat výskyty nejen v jednom konkrétním souboru, ale ve skupině. Dokončeme předchozí hledání slova mysql: spočítejte počet výskytů slov (-s) v souborech *.js(--js), s výjimkou souborů, ve kterých nebylo nic nalezeno (-h) a shrnout výsledek.
# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql
Kromě toho můžeme získat podrobnou zprávu o počtu výskytů v každém souboru pomocí (-l)
ack --js -w -cl mysql
Pokud pro své vyhledávání potřebujete další kontext, můžete požádat o potvrzení
zobrazit řádky až (-B) a po (-A) nalezeného výrazu. Chcete-li to provést, musíte za volbou zadat počet řádků, které je třeba zobrazit.
# 2 строки до
ack --js --column -B 2 "query.once('" ./lib/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
A pokud potřebujete obojí, použijte (-S)
ack --js --column -C 2 "query.once('" ./lib/
Existuje také možnost (-v) invertovat vyhledávání, tj. zobrazit řádky, které neobsahují daný vzor.
Regulární výraz
Ack, na rozdíl od grep, používá výrazy kompatibilní s Perl.
Pro mě je to velké plus; nemusím si pamatovat samostatnou syntaxi regulárních výrazů.
ack 'vars+adds+'
Složitější příklad
ack '*s+[vd+.d+.d+]'
Často chcete ve výsledcích ponechat pouze to, co odpovídá šabloně. Zde pomůže volba --output (-o)
ack -o '*s+[vd+.d+.d+]'
Navíc pomocí závorek můžeme vybrat nalezený díl a přistupovat k němu ve výstupu přes proměnnou $[číslo skupiny]. Například,
ack --output='version is $1' '*s+[v(d+.d+.d+)]'
Ack má užitečné možnosti --range-start и --konec rozsahu. Pomáhají, když
Data nejsou uložena v jednom řádku, ale ve víceřádkové podobě.
Existuje například soubor s kódem SQL
Pojďme extrahovat názvy sloupců. Začátek bloku bude řádek začínající SELECT a konec bude řádek začínající FROM.
ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql
Pokud hledaný výraz obsahuje speciální znaky, jako je tečka, závorka a další, pak, abyste je neunikli pomocí , můžete použít možnost -Q.
# Поиск с экранированием
ack --json 'mysql.'
# Поиск без экранирования
ack --json -Q mysql.
Práce se soubory
Získejte seznam souborů s konkrétní příponou
ack -f --js
Najděte všechny soubory js, jejichž název začíná na P* pomocí možnosti (-g).
ack -g --js '/Pa.+.js$'
Konfigurace
Nástroj má svůj vlastní konfigurační soubor. Můžete mít jak globální konfiguraci pro uživatele (~/.ackrc), tak místní konfiguraci pro konkrétní složku (ve složce musíte vytvořit soubor .ackrc).
Většinu voleb, které jsou zapsány v konfiguracích, lze při volání zadat ručně. Pojďme se na pár z nich podívat.
Ignorovat složku při hledání
--ignore-dir=dist
Pojďme přidat vlastní typ souboru -vue.
--type-add=vue:ext:js,vue
Nyní můžete k prohledávání souborů použít volbu --vue .vue. Například: ack --vue App.
Pro tuto možnost můžete zadat seznam přípon. Například zde, při použití -vue, bude zpracováno následující: soubory .js.
Ignorujte soubory, například minifikované *.min.js
--ignore-file=match:/.min.js$/
Instalace
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
Instalace z webu
curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack
Pluginy pro editory:
Závěr
To nejsou všechny možnosti. Úplný seznam funkcí lze zobrazit spuštěním:
ack –-help
# или
ack --man
Nástroj ack vám umožní pohodlnější a flexibilnější vyhledávání v terminálu. A pomocí potrubí (ack -C 10 ahoj | ack svět) můžete vytvořit výkonnou kombinaci pro vyhledávání a filtrování dat v systému souborů a v souborech samotných.
Zdroj: www.habr.com