Cómo hacer zgrep de varias cadenas

Cómo hacer zgrep de varias cadenas

Estoy intentando crear zgrepvarias cadenas con el siguiente código, pero si omito uno de los parámetros, se ponen en cola muchos archivos que no coinciden. Si ingreso las 5 cadenas, funciona correctamente. ¿Cómo puedo obtener zgrepcualquier número de cadenas, incluso si son solo 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

Respuesta1

si omito uno de los parámetros, se ponen en cola muchos archivos que no coinciden.

Una vez que omites, obtienes una expresión como ||la cual está vacía para que todo coincida. Tienes que verificar la entrada y construir tu expresión correctamente.

Si las cadenas también pueden contener caracteres especiales, tal vez prefiera la --fixed-stringsopción grep.

No probado:

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 - ...

información relacionada