So führen Sie Zgrep für mehrere Zeichenfolgen durch

So führen Sie Zgrep für mehrere Zeichenfolgen durch

Ich versuche, zgrepmit dem folgenden Code mehrere Zeichenfolgen zu erstellen, aber wenn ich einen der Parameter weglasse, werden viele nicht übereinstimmende Dateien gespoolt. Wenn ich alle 5 Zeichenfolgen eingebe, funktioniert es ordnungsgemäß. Wie kann ich eine zgrepbeliebige Anzahl von Zeichenfolgen eingeben, auch wenn es nur 3 von 5 sind?

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

Antwort1

Wenn ich einen der Parameter weglasse, werden viele nicht übereinstimmende Dateien gespoolt.

Wenn Sie etwas weglassen, erhalten Sie einen Ausdruck wie ||: der leer ist, sodass alles übereinstimmt. Sie müssen die Eingabe überprüfen und Ihren Ausdruck richtig erstellen.

Wenn die Zeichenfolgen auch Sonderzeichen enthalten könnten, bevorzugen Sie möglicherweise die --fixed-stringsOption „grep“.

Ungetestet:

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

verwandte Informationen