如何 zgrep 多個字串

如何 zgrep 多個字串

我正在嘗試使用zgrep下面的程式碼來處理多個字串,但是如果我省略其中一個參數,它會生成許多不匹配的檔案。如果我輸入所有 5 個字串,它就會正常工作。我怎麼有zgrep任意數量的字串,即使它只是 5 個字串中的 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

如果我省略其中一個參數,它會假脫機許多不匹配的文件。

一旦你省略了,你就會得到一個表達式,就像||它是空的,所以一切都匹配。您必須檢查輸入並正確建立表達式。

如果字串也可能包含特殊字符,也許您更喜歡--fixed-stringsgrep 選項。

未經測試:

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

相關內容