컴퓨터에 grep
이 설치되어 있지만 -R
옵션이 컴파일되지 않았으며 대체 스위치도 없습니다."grep -R"대체 하시겠습니까?
어떻게하면 bash로 바꿀 수 있습니까?
for i in `find *`; do
grep 'pattern' $i;
done
을하지만 그것은 바로 재 해석되지되지 않습니다 :
나는 시도?
컴퓨터에 grep
이 설치되어 있지만 -R
옵션이 컴파일되지 않았으며 대체 스위치도 없습니다."grep -R"대체 하시겠습니까?
어떻게하면 bash로 바꿀 수 있습니까?
for i in `find *`; do
grep 'pattern' $i;
done
을하지만 그것은 바로 재 해석되지되지 않습니다 :
나는 시도?
xargs
에 find
의 출력을 파이프 시도 그래서 grep
몇 번 (xargs
이 더는 인수 목록에 맞지 않을 것이다 너무 많이 때까지 입력을 읽는 유지)가 호출됩니다 :
find -type f | xargs grep foo
이것은 S.Lott의 해결책과 똑같은 일을 할 것입니다. 그러나 grep을 실행할 때마다 별도의 프로세스를 포크하지 않으므로 많이 실행해야합니다 빠릅니다. –
답변에 제안을 추가 할 가치가 있습니다.'find -print0 | xargs -0 egrep'에 공백이 포함 된 파일이나 디렉토리 이름이있는 경우 ... –
예, 파일 유형이 걱정되므로 '-type f'가 훌륭한 추가 기능입니다. 감사합니다. Mark Longair와 Marc B! –
우리는 일반적으로 보통 grep -R
비슷하게 작동
find . -exec grep 'pattern' {} \;
를 사용합니다.
이것은 * n * 파일에 대해'grep' * n * 시간을 실행합니다. 작은 파일이 많은 경우 비쌀 수 있습니다. 별도의 프로세스가 각각 시작되고 중지되어야하기 때문입니다. –
제안 된 솔루션은 동일합니다. 또한 성능은 요구 사항이 아니 었습니다. 그렇다면 전체 내용을 몇 줄의 파이썬으로 작성했을 것입니다. –
'찾기. -type f | xargs grep 'pattern ''은 다중 실행 문제를 해결할 것입니다. –
당신을 했 시도 해봐? 그것에 대해 맘에 안 들었던 게 뭐야? –
@Marek -이 재 해석에 대해 싫어하는 것이 무엇인지 모르겠지만,이 주된 문제점은 'grep'은 각 일치하는 줄 앞에 일치 항목의 접두어를 붙이지 않는다는 것입니다. 적어도 하나의 유닉스 시스템에서) 입력으로 하나 이상의 파일 이름이 주어지면 (그렇지 않으면 혼란이 없기 때문에 라인이 어디에서 왔는지에 대해 생각한다). 따라서 일치하는 줄에 파일 이름을 제공하는 솔루션을 찾으십시오. –