2016-08-01 1 views
0

--include 인수를 사용하여 grep 명령 (bash 스크립트 내부), 검색 할 파일 확장자로 전달하려고합니다. 이러한 파일 확장명은 사용자가 명령 줄에서 인수로 입력합니다 (4 번째 인수는 쉼표로 구분 된 방식으로 파일 확장명을 보유합니다). bash 스크립트 내에서 grep 명령을 사용하여 --include 인수에 변수 값을 전달하십시오.

내 스크립트입니다

... 
comando="egrep -irn . --include="\\*.{${4}}" --exclude=\*.{class} -e "${3}"" 
echo $comando 
resultado=eval $comando 
echo $resultado 

(comando을 울리는 때이 얻을 : egrep을 나는 또한 명령 문자열을 생성하고 다음과 같이 평가 호출 시도

... 
echo "Searching in ${4} files for pattern" 
egrep -irn . --include=\*.{"${4}"} --exclude=\*.{class} -e "${3}" 
... 

--include = *. {wsdl, xml} --exclude = *. {class} -e texto 이것은 명령 행에서 실행될 경우 일부 일치를 리턴하는 명령입니다.)

나는 또한이 인수를 포함하는 모든으로 변수를 전달하는 시도 :

... 
argumento="\\*.{${4}}" 
egrep -irn . --include=$argumento --exclude=\*.{class} -e "${3}" 
... 

이 스크립트는 명령 줄에서 호출하는 방법입니다

쉬 ./searchRecursiveIterativeEgrep.sh/tmp를/테스트/다른 /은/usr/local/aux/"texto"wsdl, xml

어떻게해야합니까? 고맙습니다.

+1

파일을 찾는 UNIX 도구의 이름은'grep'가 아니라'find'입니다. GNU greps 옵션을 추가하면 파일을 찾을 때 끔찍한 생각이었습니다 (출력을 정렬하는 grep 옵션은 무엇입니까?). ** find **는 파일을 찾기 위해'grep '을 사용하고, ** G ** lobally search ** R ** egular ** E **는 파일에서, ** P **는 일치하는 텍스트를 대체합니다. 너의 인생은 훨씬 더 단순해질거야. –

+0

파일에서 정규 표현식을 찾으려고하므로 grep이 필요합니다. 이 명령은 예상대로 작동하지만 명령 줄의 인수로는 작동하지 않습니다. –

+0

a) grep은 파일에서 정규 표현식을 찾을 수있는 유일한 도구가 아니며 b) 파일에서 정규 표현식을 찾기 위해 grep을 사용하지 말 것을 제안하는 것이 아닙니다. grep을 사용하지 말 것을 제안합니다. 파일을 잘못 접근하여 grep 명령을 어리석게 복잡하게 만듭니다. 'find'를 사용하여 파일을 찾고'grep' (또는 다른 도구)을 사용하여'find'가 찾은 파일 내에서 regexps를 검색하십시오. 'find의 줄을 따라 뭔가. -name '* .extension'-print0 | xargs -0 grep 'regexp'. –

답변

0

나는 문제가 발생한 이유를 이해했습니다. 생성 된 명령을 복사/붙여 넣기하면 작동하지만 쉘에서는 작동하지 않습니다.

그래서 내가 해결

argumento="\\*.{${4}}" 
echo egrep -irn . --include=$argumento --exclude=\*.{class} -e "${3}" | sh 

로 (새로운 쉘 에코 배관을 수행합니다 작동) 것을 제안한다. 어쩌면 그것은 가장 좋은 대답은 아니지만 일을합니다.

어쩌면 누군가가 그 사실을 설명하거나 더 깔끔하고 깨끗한 답을 얻을 수 있습니다.

당신은 어떤 샘플 입력 또는 예상 출력을 제공하지 않았다
+0

이 명령은 여러 확장명을 가진 명령 줄에서 작동합니다. egrep-aln. --include = \ *. {wsdl, xml} --exclude = \ *. {class} -e texto –

0

은 그래서 이것은 분명히 안된하지만 올바른 접근 방식은 lobally R egular E를 검색 find에이 G 파일과 grep 찾기 사용하는 것입니다 파일의 xpression 및 P 일치하는 텍스트를 rint하십시오 (이름에 힌트가 표시됩니다 ;-)). 자세한 내용은

find . -type f -name "*.$4" -print0 | xargs -0 grep -Ein "$3" 

사람이 찾아 xargs를, 그리고 그렙 : 같은 뭔가.

관련 문제