Ich versuche, zgrep
mit 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 zgrep
beliebige 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-strings
Option „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 - ...