어떤 폴더를 기준으로 .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;
}
}
}
?>
// 현재 디렉토리를 기준으로
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
명령어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 |