여러 문자열을 zgrep하는 방법

여러 문자열을 zgrep하는 방법

아래 코드를 사용하여 여러 문자열을 시도하고 있지만 zgrep매개 변수 중 하나를 생략하면 일치하지 않는 파일이 많이 스풀링됩니다. 5개의 문자열을 모두 입력하면 올바르게 작동합니다. zgrep5개 중 3개에 불과하더라도 문자열 수를 어떻게 늘릴 수 있습니까 ?

echo "Enter string 1: "
read isdn1
echo "Enter string 2: "
read isdn2
echo "Enter string 3: "
read isdn3
echo "Enter string 4: "
read isdn4
echo "Enter string 5: "
read isdn5

for host in $(cat host.txt); do 
    ssh "$host" "cd /onip/cdr/output/snapshot/normal/backup && 
      zgrep '$isdn1\|$isdn2\|$isdn3\|$isdn4\|$isdn5' xyz_shot*"
done

답변1

매개변수 중 하나를 생략하면 일치하지 않는 많은 파일이 스풀링됩니다.

생략하면 ||모든 것이 일치하도록 비어 있는 표현식을 얻게 됩니다. 입력을 확인하고 표현식을 올바르게 작성해야 합니다.

문자열에 특수 문자도 포함될 수 있는 경우 --fixed-stringsgrep 옵션을 선호할 수 있습니다.

테스트되지 않음:

isdn=""

echo "Enter string: "
while read string
do
    [ ${#string} -eq 0 ] && break # blank line cancels
    isdn="$isdn$string"$'\n'
done

echo "You entered: "
echo ----
echo -n "$isdn"
echo ----

# your ssh user@host "zgrep -F '$isdn' ..." here
#    or maybe this would allow ' in filenames too:
# echo -n "$isdn" | ssh user@host zgrep -F -f - ...

관련 정보