정기적으로 작업해야 하는 로그에 대한 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
하여 호출 하면 실제로 -E
는 grep
단일 인수를 받게 되는데 -i -E
이는 실제로 유효하지 않습니다.
다음을 수행해야 합니다.
function mygrep () {
grep "$@" /path/to/logs/my.log
}
Write는 올바른 일을 합니다. 각 인수를 단일 단어로 올바르게 확장한다는 점을 제외하면 "$@"
비슷합니다 .$*