2009-07-08 5 views
2

커지는 로그 파일에 "tail"을 수행하는 쉘 스크립트를 작성하고 있습니다. 이 스크립트는 검색 할 매개 변수를 받아들이고 그 값을 점차적으로 greps합니다. 스크립트로 호출되는 경우 예를 들어동적으로 grep 문자열 만들기

은 다음과 같습니다

logs.sh string1 string2 

가 번역한다에 :

tail -f logs.txt | grep string1 | grep string2 

이 같은 그렙 문자열의 목록을 건물입니다 :

full_grep_string="" 
for grep_string in $* 
do 
    full_grep_string="$full_grep_string | grep $grep_string" 
done 

문자열이 올바르게 작성되었지만 마침내 tail 명령에 태그를 붙이려고하면 ...

tail -f $LOG_FILE_PATH $full_grep_string 

... grep이 적용되지 않으며 필터링되지 않은 로그가 표시됩니다.

여기에 뭔가가 있습니까? 아니면 이것을 할 수있는 더 쉬운 방법이 있습니까?

+0

그냥 작은 설명을 사용 : 스크립트가해야 출력 로그 파일의 라인을 둘다 포함하는 생각이 string1과 string2 중 하나를 포함하는 줄을 찾으려고 했습니까? –

+0

또한 어떤 셸을 사용하고 있습니까? 세게 때리다? –

+0

데비안 lenny에 대해 나는 두 grep 결합이 tail -f와 함께 작동하지 않지만 단지 꼬리로 작동하지 않는다는 문제에 직면해야한다. – tuergeist

답변

2
eval tail -f $LOG_FILE_PATH $full_grep_string 
+0

효과가있었습니다! 감사! :) –

1

grep 버퍼가 발견 된 행을 버퍼링합니다. 그래서 코드를

full_grep_string="$full_grep_string | grep --line-buffered $grep_string" 

으로 수정해야합니다. 나는 debian lenny에서 bash로 테스트했다.

그리고 AN0

eval tail -f ... 

의 끝 (이 모든 전체 단어 작동)

+0

팁 주셔서 감사합니다.하지만 grep의 제 버전이 너무 오래되어 전체 단어 인수를 취하는 것처럼 보입니다. SunOS 5.8 상자에서 테스트하고 있습니다. 아주 오래된 소프트웨어. :) –