/
ack-grep ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋น ๋ฅธ ์ฝ”๋“œ ๊ฒ€์ƒ‰ ๋„๊ตฌ ag(silver searcher)

ack-grep ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋น ๋ฅธ ์ฝ”๋“œ ๊ฒ€์ƒ‰ ๋„๊ตฌ ag(silver searcher)

๋” ๋‚˜์€ ๋ช…๋ น์–ด์ธ ripgrep ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.


ack ๋ช…๋ น์–ด๋Š” grep ์ฒ˜๋Ÿผ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์›ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ์ฐพ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ์ธ๋ฐ ๊ฐœ๋ฐœ์ž์— ํŠนํ™”๋œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.


ag ๋Š” ack ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋ช…๋ น์–ด๋กœ ๊ฐœ๋ฐœ์ž ํŽธ์˜์„ฑ๊ณผ ์†๋„์— ์ฃผ์•ˆ์„ ๋‘๊ณ  ๊ฐœ๋ฐœํ•œ ์ œํ’ˆ์œผ๋กœ ์ž๋™์œผ๋กœ .gitignore ์— ์žˆ๋Š” ํŒŒ์ผ ํŒจํ„ด๋“ค์„ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‹ค์–‘ํ•œ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ์ •๋ง ๋ฒˆ๊ฐœ๊ฐ™์€ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.


์ด๋ ‡๊ฒŒ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋น ๋ฅธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. posix thread ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ‘๋ ฌ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฏ€๋กœ multi core ์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉ
  2. buffer ๋Œ€์‹  memory mapped file(mmap) system call ์‚ฌ์šฉ
  3. ๋ณด์ด์–ด ๋ฌด์–ด(Boyer-Moore) ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ(๋งํฌ)
  4. ์ •๊ทœ์‹ ๊ฒ€์ƒ‰์‹œ PCRE JIT compiler ์‚ฌ์šฉ
  5. ๋™์ผํ•œ ์ •๊ทœ์‹์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ  pcre_study() ์‚ฌ์šฉ
  6. 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/

๊ฐ™์ด ๋ณด๊ธฐ

Ref

Related content

grep ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋น ๋ฅธ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰๊ธฐ - ripgrep
grep ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋น ๋ฅธ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰๊ธฐ - ripgrep
More like this
Linux find ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” fd ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ•
Linux find ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” fd ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ•
More like this
์ปดํฌ์ €(PHP Composer) ์†๋„ ํ–ฅ์ƒ ์‹œํ‚ค๊ธฐ
์ปดํฌ์ €(PHP Composer) ์†๋„ ํ–ฅ์ƒ ์‹œํ‚ค๊ธฐ
More like this
๋น ๋ฅด๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ๊ฒ€์ƒ‰ ์—”์ง„ - MeiliSearch Search Engine
๋น ๋ฅด๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ๊ฒ€์ƒ‰ ์—”์ง„ - MeiliSearch Search Engine
More like this
Ubuntu Mirror(์šฐ๋ถ„ํˆฌ ๋ฏธ๋Ÿฌ)๋ฅผ ์นด์นด์˜ค๋“ฑ ๊ตญ๋‚ด ์‚ฌ์ดํŠธ๋กœ ์„ค์ •ํ•ด์„œ ๋‹ค์šด๋กœ๋“œ ์†๋„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ
Ubuntu Mirror(์šฐ๋ถ„ํˆฌ ๋ฏธ๋Ÿฌ)๋ฅผ ์นด์นด์˜ค๋“ฑ ๊ตญ๋‚ด ์‚ฌ์ดํŠธ๋กœ ์„ค์ •ํ•ด์„œ ๋‹ค์šด๋กœ๋“œ ์†๋„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ
More like this
bash ์ž๋™ ์™„์„ฑ(auto completion) ๊ธฐ๋Šฅ์œผ๋กœ ์ปค๋งจ๋“œ๋ผ์ธ ์ƒ์‚ฐ์„ฑ ๋†’์ด๊ธฐ
bash ์ž๋™ ์™„์„ฑ(auto completion) ๊ธฐ๋Šฅ์œผ๋กœ ์ปค๋งจ๋“œ๋ผ์ธ ์ƒ์‚ฐ์„ฑ ๋†’์ด๊ธฐ
More like this