공통 로그를 사용하여 grep 기능 단순화

공통 로그를 사용하여 grep 기능 단순화

정기적으로 작업해야 하는 로그에 대한 grep 작업을 단순화하는 함수를 만들려고 합니다.

파이프와 함께 확장 정규식을 사용하고 출력 등을 리디렉션하고 싶습니다.

하지만 표준을 사용하여 이 작업을 수행하는 데 문제가 있습니다.그렙 패턴 파일함수의 구문.

지금 설정한 방식은 끔찍해 보이지만 작업은 완료됩니다.

alias mygrep='cat /path/to/logs/my.log | grep'

이를 통해 문제 없이 다음 명령을 실행할 수 있습니다.

mygrep -i -E "WARN|java" |less

올바른 구현은 다음과 같아야 합니다.

function mygrep () {
    args=$*
    grep "$args" /path/to/logs/my.log
}

그러나 위의 검색 및 파이프 매개변수와 함께 이것을 사용하면 grep은잘못된 옵션실수.

내가 무엇을 놓치고 있나요?

답변1

다음 코드가 인용됩니다 $args.

grep "$args" /path/to/logs/my.log

이를 위해서는 변수의 전체 값이 단일 인수로 grep에 전달되어야 합니다. 따라서 및 mygrep인수를 사용 -i하여 호출 하면 실제로 -Egrep단일 인수를 받게 되는데 -i -E이는 실제로 유효하지 않습니다.

다음을 수행해야 합니다.

function mygrep () {
    grep "$@" /path/to/logs/my.log
}

Write는 올바른 일을 합니다. 각 인수를 단일 단어로 올바르게 확장한다는 점을 제외하면 "$@"비슷합니다 .$*

관련 정보