複数の文字列をzgrepする方法

複数の文字列をzgrepする方法

以下のコードで複数の文字列を試みていますzgrepが、パラメータの 1 つを省略すると、一致しないファイルが大量にスプールされます。5 つの文字列をすべて入力すると、正常に動作します。5 つzgrepのうち 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

パラメータの 1 つを省略すると、一致しないファイルが多数スプールされます。

省略すると、||which のような式が得られ、すべてが一致する空になります。入力をチェックして、式を正しく構築する必要があります。

文字列に特殊文字も含まれる可能性がある場合は、grep のオプションを使用することをお勧めします--fixed-strings

未テスト:

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

関連情報