ack-grep ์ ๋์ฒดํ ์ ์๋ ๋น ๋ฅธ ์ฝ๋ ๊ฒ์ ๋๊ตฌ ag(silver searcher)
๋ ๋์ ๋ช ๋ น์ด์ธ ripgrep ์ ์ฌ์ฉํ๋ ๊ฒ ์ข์ต๋๋ค.
ack ๋ช ๋ น์ด๋ grep ์ฒ๋ผ ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ์์ ์ํ๋ ๋ฌธ์์ด์ ์ฐพ๋ ์ ํธ๋ฆฌํฐ์ธ๋ฐ ๊ฐ๋ฐ์์ ํนํ๋ ๋๊ตฌ์ ๋๋ค.
ag ๋ ack ๋ฅผ ๋์ฒดํ๋ ๋ช ๋ น์ด๋ก ๊ฐ๋ฐ์ ํธ์์ฑ๊ณผ ์๋์ ์ฃผ์์ ๋๊ณ ๊ฐ๋ฐํ ์ ํ์ผ๋ก ์๋์ผ๋ก .gitignore ์ ์๋ ํ์ผ ํจํด๋ค์ ๊ฒ์ํ์ง ์์ผ๋ฉฐ ๋ค์ํ ์ต์ ํ๋ฅผ ํตํด ์ ๋ง ๋ฒ๊ฐ๊ฐ์ ๊ฒ์ ์๋๋ฅผ ๋ณด์ฌ์ค๋๋ค.
์ด๋ ๊ฒ ๊ฒ์ ์๋๊ฐ ๋น ๋ฅธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- posix thread ๋ฅผ ์ฌ์ฉํด์ ๋ณ๋ ฌ๋ก ๊ฒ์ํ๋ฏ๋ก multi core ์ ์ฅ์ ์ ์ต๋ํ ํ์ฉ
- buffer ๋์ memory mapped file(mmap) system call ์ฌ์ฉ
- ๋ณด์ด์ด ๋ฌด์ด(Boyer-Moore) ๋ฌธ์์ด ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ(๋งํฌ)
- ์ ๊ท์ ๊ฒ์์ PCRE JIT compiler ์ฌ์ฉ
- ๋์ผํ ์ ๊ท์์ ๋ฐ๋ณต์ ์ผ๋ก ์ปดํ์ผํ์ง ์๊ณ pcre_study() ์ฌ์ฉ
- ignore ํ์ผ์ fnmatch() ๋ก ๋งค๋ฒ ๊ฒ์ํ์ง ์๊ณ array ๋ก ๋ก๋ฉํ ํ์ binary search๋ก ์ฒ๋ฆฌ
ag ๊ฐ ๋น ๋ฅด์ง๋ง ๋ฏธ๋ฆฌ index ๋ฅผ ๋ง๋ค์ด ๋๊ณ ์ฌ์ฉํ๋ ctags ๋ณด๋ค๋ ๋๋ฆฝ๋๋ค.
ag ๋ณด๋ค๋ rg(ripgrep) ์ ์ถ์ฒํฉ๋๋ค.
์ค์น
์ ์ฒด ์ค์น ๋ฐฉ์์ ag ์ github ์ ์ฅ์(๋งํฌ)๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Ubuntu
sudo apt install silversearcher-ag
OSX
brew install the_silver_searcher
CentOS/Rocky Linux
sudo yum install the_silver_searcher
Windows
MS์ ํจํค์ง ๊ด๋ฆฌ์์ธ winget ์ผ๋ก ์ค์นํ๋ฉด ๋ฉ๋๋ค.
winget install "The Silver Searcher"
์ฌ์ฉ
ag ๋ช ๋ น์ด ๋ค์ ๊ฒ์ํ ๋ฌธ์์ด๊ณผ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅํด ์ฃผ๋ฉด ๋ฉ๋๋ค. ๋ค์์ src ๋ฐ์ ์๋ ํ์ผ๋ค์์ cache ๋ผ๋ ๋ฌธ์๋ฅผ ๋์๋ฌธ์ ๊ตฌ๋ถ์์ด ๊ฒ์ํฉ๋๋ค.
ag cache src/
๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ ค๋ฉด -s, --case-sensitive ์ต์ ์ ์ถ๊ฐํฉ๋๋ค.
ag -s cache src/
๋ฌด์ํ๋ ค๋ฉด ํ์ผ ํจํด์ด ์๋ค๋ฉด --ignore ๋ค์ ํจํด์ ์ ์ด์ฃผ๋ฉด ๋ฉ๋๋ค. ๋ค์์ ํ์ฅ์๊ฐ .md ์ธ ํ์ผ์ ์ ์ธํ๊ณ ๊ฒ์ํฉ๋๋ค.
ag -s cache --ignore "*.md" src/
๋ฌด์ํ ํจํด์ด ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด --ignore ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํด์ ๊ธฐ์ ํด ์ฃผ๋ฉด ๋ฉ๋๋ค. ๋ค์์ ํ์ฅ์๊ฐ .md ์ .yaml ์ธ ํ์ผ์ ์ ์ธํ๊ณ ๊ฒ์ํฉ๋๋ค.
ag -s cache --ignore "*.md" --ignore "*.yaml" src/