
grep 주변의 래퍼로, 원하는 것을 grep 하는 데 도움을 줍니다.
grep을 감싸서 흔한 패턴을 직접 입력하지 않아도 되게 하는 래퍼입니다.
저는 grep을 많이 사용합니다. 코드 베이스를 감사할 때, meg의 출력을 확인할 때, 또는 그냥 일반적으로 대량의 데이터를 다룰 때, 저는 종종 다음과 같은 상당히 복잡한 패턴을 사용하게 됩니다:
▶ grep -HnrE '(\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))' *
이 모든 것을 입력할 때 실수하기 쉽고, 결과가 없는 이유가 찾을 것이 없어서인지, 패턴을 잘못 작성했거나 잘못된 플래그를 선택했기 때문인지 알기 어렵습니다.
저는 항상 사용하는 패턴과 플래그 조합에 이름을 부여하기 위해 gf를 작성했습니다. 그래서 위의 명령은 단순히 다음과 같이 됩니다:
▶ gf php-sources
패턴 정의는 ~/.gf에 버전 관리 대상으로 둘 수 있는 작은 JSON 파일로 저장됩니다:
▶ cat ~/.gf/php-sources.json
{
"flags": "-HnrE",
"pattern": "(\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))"
}
패턴의 길이와 복잡성을 조금 줄이기 위해 여러 패턴의 목록을 지정할 수도 있습니다:
▶ cat ~/.gf/php-sources-multiple.json
{
"flags": "-HnrE",
"patterns": [
"\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)",
"php://(input|stdin)"
]
}
examples 디렉토리에는 더 많은 예제 패턴 파일이 있습니다.
명령줄에서 패턴 파일을 생성하려면 -save 플래그를 사용할 수 있습니다:
▶ gf -save php-serialized -HnrE '(a:[0-9]+:{|O:[0-9]+:"|s:[0-9]+:")'
자동 완성 스크립트가 포함되어 있어 'tab' 키를 눌러 어떤 옵션이 있는지 확인할 수 있습니다:
▶ gf <tab>
base64 debug-pages fw php-curl php-errors php-sinks php-sources sec takeovers urls
자동 완성을 작동시키려면 .bashrc 또는 유사한 파일에서 gf-completion.bash 파일을 source해야 합니다:
source ~/path/to/gf-completion.bash
자동 완성을 작동시키려면 autoload -U compaudit && compinit을 사용하거나 이를 .zshrc에 넣어 자동 완성을 활성화해야 합니다 (oh-my-zsh가 있는 경우 필요하지 않습니다).
그런 다음 .zshrc 또는 유사한 파일에서 gf-completion.zsh 파일을 source하세요:
source ~/path/to/gf-completion.zsh
참고: oh-my-zsh 또는 유사한 것을 사용하는 경우 gf가 git fetch의 별칭(alias)임을 알 수 있습니다. gf 바이너리를 다른 이름으로 별칭을 지정하거나 unalias gf를 사용하여 git fetch 별칭을 제거할 수 있습니다.
grep을 더 잘 대체할 수 있는 멋진 코드 검색 엔진들이 많이 있습니다. 좋은 예는 the silver searcher입니다. 더 빠르고(훨씬 빠르게) 결과를 시각적으로 더 이해하기 쉬운 방식으로 보여줍니다. 다른 엔진을 사용하려면 해당 패턴 파일에 engine: <other tool>을 추가하세요:
# Using the silver searcher instead of grep for the aws-keys pattern:
# 1. Adding "ag" engine
# 2. Removing the E flag which is irrelevant for ag
{
"engine": "ag",
"flags": "-Hanr",
"pattern": "([^A-Z0-9]|^)(AKIA|A3T|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{12,}"
}
aws-keys.json 파일에서 플래그 E를 제거해야 합니다.Go가 설치되어 있고 구성되어 있다면 다음과 같이 gf를 설치할 수 있습니다:
▶ go get -u github.com/tomnomnom/gf
go get을 사용하여 설치했다면 다음과 같이 .bashrc에 자동 완성을 활성화할 수 있습니다:
▶ echo 'source $GOPATH/src/github.com/tomnomnom/gf/gf-completion.bash' >> ~/.bashrc
변경 사항을 적용하려면 터미널을 다시 시작하거나 source ~/.bashrc를 실행해야 합니다.
빠르게 시작하려면 예제 패턴 파일을 다음과 같이 ~/.gf에 복사할 수 있습니다:
▶ cp -r $GOPATH/src/github.com/tomnomnom/gf/examples ~/.gf
예제로 포함한 제 개인 패턴이 여러분에게 그다지 유용하지 않을 수도 있지만, 그래도 합리적인 참고 자료가 되기를 바랍니다.
사실 새로운 패턴 파일에 가장 관심이 많습니다! 정기적으로 grep하는 것이 있다면 언제든지 PR을 보내 examples 디렉토리에 새 패턴 파일을 추가해 주세요.
버그 수정도 언제나 환영합니다 :)