파일내용 검색

Linux 2009. 5. 8. 20:45



어떤 폴더를 기준으로 .tpl 확장자를 가진 파일 중 내용에 'eq' 나 'neq'를 포함하고 있는 파일의 이름과 해당 검색어가 포함된 라인번호를 출력하는 명령어.


find ./ -name '*.tpl' -exec egrep -n '(eq|neq)' '{}' +


find ./ -name '*.tpl' | xargs egrep -n '(eq|neq)' 

find가 검색해 출력하는 파일리스트를 라인별로 나눠서 각 라인별로 한 번씩 뒤에 넣은 명령어의 인자로 실행.



위에 있는 두 명령어의 결과는 동일하다.
요점은 xargs의 역할 정도랄까...

이해를 돕기 위해 위 명령어를 PHP 스크립트로 만든다면 아래와 같은 형태이다.
foreach가 xargs처럼 동작하고 있는 형태이다.
커맨드라인에서 arguments를 받아들여 처리한다면 위와 같은 명령어 형태로 만들 수도 있다...-_-;

<?
// 현재 디렉토리를 기준으로
exec("pwd", $currentDir);
// find 명령어를 실행. 결과는 $list에 저장
$commandLine = "find ".$currentDir[0]." -name '*.tpl'";
exec($commandLine, $list);

// find가 찾아낸 결과를 매개변수로 'eq'나 'neq'가 포함된 파일을 찾아 파일명, 라인수, 문자열을 출력
foreach ($list as $v) {
        $content = file($v);
        foreach ($content as $k=>$v1) {
                if (strpos($v1, 'eq') OR strpos($v1, 'neq')) {
                        echo $currentDir[0]." : ".$k." : ".$v1;
                }
        }
}
?>






xargs

표준입력(standard input)으로 부터 명령어를 조합해서 실행.


명령어1 | xargs 명령어2

위와 같은 형태로 명령어를 입력했을 경우 명령어1의 결과를 빈칸이나 newline으로 나눠서 매개변수로 하여 명령어2를 실행시킴.






'Linux' 카테고리의 다른 글

Putty 자동로그인  (0) 2009.05.14
Putty 설정관련  (0) 2009.05.14
SCP (Secure CoPy)  (0) 2009.05.08
egrep (정규식 grep)  (0) 2009.05.02
압축  (0) 2009.05.02
Posted by bloodguy
,