![如何 zgrep 多个字符串](https://linux22.com/image/95421/%E5%A6%82%E4%BD%95%20zgrep%20%E5%A4%9A%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我正在尝试使用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-strings
grep 选项。
未经测试:
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 - ...