2017-09-23 19 views
0

현재, 나는 일반적으로 찾아 형태로 그렙의 조합을 사용 , zsh를 사용하면 실제로는 꽤 짧습니다. f (첫 번째 문자)를 입력하고 내 명령 기록에서이 명령으로 직접 이동합니다. find/grep의 정규식은 표준화되어 테스트되었으므로 놀라움이나 누락 된 검색이 없습니다.Silversearcher/ACK, GREP

ripgrep/ag 등은 새 소프트웨어로, 원래 메인터너가 관심을 잃었을 때 몇 년 후 지원되지 않을 수 있습니다.

  1. 의 grep 그렙/다른 버전의 AG/ACK/RG에 .gitignore 규칙이나 최적화를 포함하는 어떤 계획이 있습니까? 이러한 최적화가 grep에 포함되지 않는 이유가 있습니까?

  2. 전환 한 사용자 : 특히이 도구에 대한 학습 곡선이 있기 때문에 rg/ag/ack로 전환하는 것이 좋습니다.

+3

나는 ack로 시작했고 학습 곡선이별로 없다. python으로 검색을 제한하려면'ack '\ b __ [[: alnum :]] * _ \ b'' (또는'ack - python'\ b __ [[alnum :]] * _ \ b'' 파일). – melpomene

+2

'ack'는 사용하기 쉽습니다. grep과 관련된 주된 복잡성/특징은 POSIX 대신 정규 표현식을 사용한다는 것입니다. 또 다른 차이점은'grep'은 훌륭한 범용 툴이지만 'ack'는 프로그래머들의 요구에 부응하기 위해 특수화 된 것입니다. – John1024

+0

의견을 보내 주셔서 감사합니다. 지금 사용하는 정규식은 비교적 간단합니다. 매주보다 복잡한 정규 표현식 검색이 필요합니다. 나는 grep -P에 대해서도 들었다. find와 비슷한 것이 있는지는 확실하지 않다. 향후 PCRE가 필요할 경우 PCRE가 가능할 수있는 검색의 복잡성 측면에서 POSIX 정규 표현식보다 우수하다고 생각하십니까? –

답변

0

ag을 사용하십시오.

귀하의 예제의 핵심 부분 : ag -G '.*python3.*py' '\b__[[:alnum:]]*_\b'

의 Ag가 여기에 있습니다 및 POSIX 기본 또는 확장 정규 표현식보다 훨씬 더 유연 펄 정규 표현식 (PCRE)를 사용합니다. Grep -P은 Perl 정규 표현식 엔진을 사용하므로 나중에 좀 더 현대적인 기능을 사용하지 않고 ag를 사용하는 것과 유사합니다. 마찬가지로, ack는 ag와 비슷하지만 속도는 더 느립니다 (비록 종소리와 호루라기가 약간 있음). Ag의 파일 정규식 필터링 (위에 예시 된 -G 플래그)과 내장 된 파일 유형 필터는 매우 편리합니다 (예 : - python). 최근에 이름이 바뀐 .ignore 파일도 미세 조정을 제공합니다.

많은 현대 언어 (자바, C++)와 비슷한 기능 세트 (예 : java.util.regex)가있는 것처럼 대부분의 최신 스크립팅 언어는 PCRE 또는 PCRE (perl, python, ruby)에서 유사한 기능을 가진 정규 표현식을 처리하므로, Boost.Regex), 나는 이것을 스위치가있는 주된 이유라고 생각한다. 또한 명령 줄 스킬 셋을 사용하여 프로그래밍을 통합하는 데 만족합니다.

필자가보기에 ripgrep은 파일 형식을 더 빨리 추가하고 쉽게 추가 할 수 있기 때문에 ag의 주요 경쟁자입니다. 즉, 유연한 정규식 엔진이 없다는 것입니다. 즉, 역 참조 나 둘러보기가 없습니다. 이 마음으로 나는 Ag를 추천한다.