2017-03-10 1 views
0

, 나는 기본적으로 재귀 그렙 문입니다 bashrc에 기능 RG 썼다 :Cygwin에서에서

rg() { 
    find . -type f -exec grep -il $1 {} \; 
} 

이 잘 작동,하지만 지금은에 추가 그렙를 실행해야 각 출력 라인은 다른 단어를 검사합니다. 기본적으로 두 단어가 포함 된 각 파일을 나열해야합니다 (반드시 같은 줄에있는 것은 아닙니다). 이 명령을 시도 :

rg Word1 -exec grep -il Word2 {} \; 

이것은 "Word1"을 포함하는 동일한 파일을 출력하는 것으로 보입니다.

이 다음 명령을 시도했는데 각 행에 "Ha"가 출력되었다고 생각했지만 여전히 "rg Word1"문에서 파일을 나열합니다.

rg Word1 -exec echo "Ha" \; 

그래서 나는 분명히 뭔가 잘못하고 있습니다. 누구나 내 혼란을 없앨 수 있습니까? 나는 grep 내에서 이것을 할 수있는 방법이 있음을 알고 있지만, 그것은 per-line basis로 작동하는 것으로 보인다. 나는 내가하려고하는 것이 꽤 흔하다 고 생각하고있다. 또한 일단이 작업을 얻으면 편의를 위해 다른 bashrc 함수에 넣고 싶습니다. 그것이 더 복잡한 지 아닌지 확실하지 않습니다.

+1

'-exec grep -il Word2 {} \;'인수를'rg'에 넘겨 줘야하지만 함수에서 아무 것도 사용하지 않으므로 아무 효과가 없습니다. –

+0

그래서 기본적으로 여러분은 단지 명령'find를 실행합니다. '$ 1'이 (가) 당신의 예제에서 모두'Word1'입니다. – 123

+0

"-exec grep"을 rg의 인수가 아닌 방법으로 만들 수 있습니까? 이런 식으로 exec를 사용할 수 있습니까? – Zip184

답변

1

가지고 있거나 얻을 수있는 경우 xargs 명령은 표준 입력에서 명령 인수를 수집 한 다음 지정된 명령을 실행합니다. 함수의 출력을 필터링하기 위해 함수를 rg 함수와 결합 할 수 있습니다. 예를 들어,

rg Word1 | xargs grep -il Word2 

xargs이 표준 입력을 판독 인자 - 기능 rg 의해 방출 된 파일 이름 - 지정된 명령 (grep -il Word2), 생성 된 실행 명령에 첨부한다. xargs의 입력이 길면 인수가 grep 명령의 여러 호출에 분할되어 출력 (이 경우)과 차이가 없지만 인수가 너무 많아 명령 실행이 실패하지 않습니다.


또한 별도 실행 grep 프로세스의 수를 최소화하는 (즉 xargs 사용)와 동일한 방식으로 기능 rg 구조화 고려한다. 새로운 프로세스를 시작하는 것은 당신이 할 수있는 값 비싼 것들 중 하나입니다.

관련 문제