재귀 지원을 추가하려고 합니다.파일 그렙 스크립트.
어떤 이유로 인해 예상대로 작동하지 않습니다.
RECURSIVE_MODE=off
# iterate over args
for ARG in "$@"
do
if [ -d "$ARG" ] && [ $RECURSIVE_MODE = on ] ; then
# recursive call
$0 $GREP_ARGS $ARG/*
elif [ -f "$ARG" ]; then
filecat "$ARG" | grep $GREP_ARGS | sed "s#^#$ARG: #"
else
[ "$ARG" = "-r" ] && RECURSIVE_MODE=on
# append to the current grep args
GREP_ARGS="$GREP_ARGS $ARG"
fi
done
이 경우에는 가독성을 높이기 위해 함수 사용을 피하고 싶습니다.
편집: 스크립트는 다음과 같이 작동해야 합니다.
전달된 각 매개변수에 대해 다음을 수행합니다.
- 현재 인수가 디렉터리인 경우 재귀 모드가 활성화되어 있는지 확인하고 활성화된 경우 재귀 호출을 수행합니다.
- 그렇지 않고 현재 인수가 파일이면
grep
현재 모드가 사용됩니다. - 그렇지 않으면 현재 인수가 grep 패턴 또는 grep 스위치이고 현재
$GREP_ARGS
목록에 추가된 것으로 가정됩니다.
아마도 이것은 완전히 신뢰할 수는 없지만 대체 등 으로 나에게는 잘 작동합니다 zgrep
.pdfgrep
답변1
-H
다음 옵션을 사용해 보십시오 grep
.
-H, --with-filename Print the filename for each match.
따라서 스크립트를 호출하는 대신 다음을 수행하십시오.
grep -H PATTERN [FILE...]
또한 래퍼 스크립트를 작성하기 전에 사용 중인 도구의 매뉴얼 페이지를 확인하는 것이 좋습니다. 일반적인 Unix 도구를 사용하면 원하는 간단한 옵션이 거의 항상 도구에 이미 내장되어 있습니다.
답변2
마침내 문제가 스위치 grep
에 있다는 것을 알았습니다-r
stdin을 무시하고 현재 작업 디렉터리에서 검색. stdin에서 강제로 읽으려면 다음을 추가했습니다 -
.
filecat "$ARG" | grep $GREP_ARGS - | sed "s#^#$ARG: #"