xenserver로 작업하고 디렉토리에있는 각 파일에 명령을 수행하고 명령의 출력에서 일부 내용을 제거한 다음 파일에 추가합니다.디렉토리의 모든 파일에서 grep 작업을 수행하는 방법
내가 원하는 명령과 필요한 경우 문자열을 grep하는 방법은 확실합니다.
하지만 확실하지 않은 점은 파일을 찾을 때까지 다음 파일로 이동하여 각 파일에서이 명령을 수행하는 방법입니다.
xenserver로 작업하고 디렉토리에있는 각 파일에 명령을 수행하고 명령의 출력에서 일부 내용을 제거한 다음 파일에 추가합니다.디렉토리의 모든 파일에서 grep 작업을 수행하는 방법
내가 원하는 명령과 필요한 경우 문자열을 grep하는 방법은 확실합니다.
하지만 확실하지 않은 점은 파일을 찾을 때까지 다음 파일로 이동하여 각 파일에서이 명령을 수행하는 방법입니다.
리눅스에서, 나는 일반적으로 재귀, 어디 디렉토리
grep -rni "string" *
에서 특정 텍스트를 grep으로이 명령을 사용하여
R = 재귀 즉, 현재 디렉토리 내에서 검색 하위 디렉토리
N = stdout에 줄 번호를 인쇄하는 방법
i = 대소 문자를 구별하지 않는 검색
grep $PATTERN *
으로 충분합니다. 기본적으로 grep은 모든 하위 디렉토리를 건너 뜁니다. 그러나 grep을 사용하려면 grep -r $PATTERN *
이 좋습니다.
찾기를 사용하십시오.
find . -name "*.sql" -exec grep -H "slow" {} \;
주는 결과에서 파일 이름을 보여준다는 -H는 맥 전용입니다 : 진심으로, 그 다음 당신이 정말로에서 작동 무슨 파일을 볼 수 있기 때문에 가장 좋은 방법입니다. 여러 명령을 수행 할 경우
find를 사용하기로 결정했다면,'-exec'를 사용하는 대신'xargs'를 통해 출력을 파이프합니다. 왜냐하면'-exec'이 각 grep에 새로운 프로세스를 생성하고 오버 헤드가 많은 수의 파일. 파일 이름의 공백에 대한 표준 경고는'xargs '에 적용됩니다. –
이 모양은 정확히 무엇입니까? 나는 항상'xargs' 문법을 잊어 버린다. –
@BrianPeterson 그것은 다음과 같이 될 것입니다 :'find. -iname "* .sql"-print0 | xargs -0 grep "slow"' – MediaVince
, 당신은 사용할 수 있습니다
for I in `ls *.sql`
do
grep "foo" $I >> foo.log
grep "bar" $I >> bar.log
done
"그렙 -r의 $ 패턴." 충분하다. 재귀 적 grep의 경우 모든 파일을 지정할 필요가 없습니다. – Cougar
여러 확장을 어떻게 포함합니까? 예 : "\ *. cpp", "\ *. h"? –
@ Tomáš Zato는 * :'grep $ PATTERN * .cpp * .h' 대신 모든 파일 패턴을 제공합니다. 어떤 파일을 그릴 지에 대한 좀 더 구체적인 규칙이 필요하면'find' 명령을 사용하십시오 (Rob의 답을 확인하십시오). – umi