2013-04-16 2 views
0

c- 쉘을 선택하지 않았습니다. 우리가 여기서 사용하는 것입니다.Solaris unix, c-shell, 리다이렉션 xargs 명령 실행 결과

그래서 현재의 디렉토리와 모든 하위 디렉토리에서 파일의 특정 계정 번호를 찾기 위해 * .utv 및 egrep 형식의 파일을 찾고자합니다.

나는이 같은 시도 :

egrep -l "ACCOUNT NO: +700 " `find . -name "*.utv" ` | more 

을하지만 메시지 "``에서 너무 많은 단어"를 얻었다.

그래서 분명히 너무 많은 파일 이름이 egrep 명령 줄로 전달되어 xargs를 사용하고 있습니다.

나는이 수행 할 때

find . -name "*.utv" | xargs -n1 egrep -i -l '"ACCOUNT NO: +700 "' {} >&! /home/me/output.txt 

"PS -ef"명령 쇼 :

% ps -ef | egrep -i "myuserid" 
myuserid 20791 22549 0 18:19:38 pts/20  0:00 find . -name *.utv 
myuserid 20792 22549 0 18:19:38 pts/20  0:00 xargs -n1 egrep -i -l "ACCOUNT NO: +700 " 
myuserid 22774 20792 1 18:21:13 pts/20  0:04 egrep -i -l "ACCOUNT NO: +700 " ./01/130104_reportfile.utv 
% 

을하지만 나는 '경우 output.txt "파일에는 출력을 얻을 수 없습니다.

같은 디렉토리에서 egrep 부분을 직접 실행하면 계정 700 문자열을 포함하는 파일 이름 목록이 표시됩니다.

그룹화, 적절한 인용 및/또는 올바른 위치의 리디렉션이 문제 일 것이라고 확신하지만, 많은 시행 착오 (그리고 여기에서 검색)를 한 후에도 여전히 어디든.

제안 사항?

답변

1

는 당신은 원래의 명령으로, 검색 주위에 작은 따옴표 또는 큰 따옴표 (하지만 모두) 중 하나가 필요합니다

find . -name "*.utv" | xargs -n1 egrep -i -l "ACCOUNT NO: +700 " {} >&! /home/me/output.txt 
find . -name "*.utv" | xargs -n1 egrep -i -l 'ACCOUNT NO: +700 ' {} >&! /home/me/output.txt 

나는 또한 -n1-i과의 {} 잃을 것 명령 줄도. 항상 나열된 파일 이름을 얻을 수있는 트릭 이름으로 /dev/null을 지정하는 것입니다,하지만 -l 또한 작업을 수행합니다

find . -name "*.utv" | xargs egrep -l 'ACCOUNT NO: +700 ' >&! /home/me/output.txt 

을 그리고 당신은 C 쉘이 될 힘을 계몽 할 필요가 프로그래밍 좋지 않다. .login 스크립트에 항상 exec /bin/bash -l을 추가 할 수도 있고 /bin/bash 대신 /bin/ksh을 사용할 수도 있습니다. 나는 "당신은 정상적이고 문명화 된 껍데기를 사용할 수 없다"는 규칙을 가진 트럭을 가지고 있지 않을 것입니다.

+0

LOL ... 감사합니다. – user2285103