Como zgrep várias cadeias

1

Estou tentando zgrep multiple strings com o código abaixo, mas, se omitir um dos parâmetros, ele gera muitos arquivos incompatíveis. Se eu digitar todas as 5 strings, ele funcionará corretamente. Como posso zgrep qualquer número de strings, mesmo que seja apenas 3 de 5.

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
    
por yemmy 29.09.2016 / 13:37

1 resposta

1

if I omit one of the parameter it spools a lot of un-matching files.

Depois de omitir, você recebe uma expressão como || , que está vazia, então tudo corresponde. Você precisa verificar a entrada e construir sua expressão corretamente.

Se as strings também puderem conter caracteres especiais, talvez você prefira a opção --fixed-strings do grep.

Não testado:

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 - ...
    
por 29.09.2016 / 13:55