如何在 bash 脚本中多次使用带有"-"(破折号)的 stdin?



我正在编写一个bash脚本,它的输入可以通过管道给出,为此我使用&quot-"但是它可以使用一次。我试图用input=$(cat -)将其保存在一个变量中,但我担心如果输入文件很大,可能会出现问题。我想知道使用输入的最佳方式-"给我。

脚本的想法是这样做:

#!/bin/bash
a=(cat - | grep -c "whatever")
b=(cat - | grep -c "whatever")
c=$(echo "($a+$b)" | bc)
echo "$c"
默认情况下,cat读取其标准输入。所以&quot-"不需要。

如果你需要";grep";输入中的两个正则表达式,您可以在不使用cat的情况下使用grep,因为默认情况下它也读取其标准输入。

如果目标是计算输入中两种不同模式的出现次数,那么您尝试做的等效操作可能是:

#!/bin/bash
grep -c -E '(whatever1|whatever2)'

如评论中所指出的,如果要求还考虑行中的图案的多次出现以及同一行中的两个图案-o";可以使用grep的选项:

-o,--仅匹配
只打印匹配行的匹配(非空(部分,每个部分在单独的输出行上

有了这样的选项,grep的输出就有匹配模式的行数。因此,增强型代码使用wc -l对这些行进行计数,并显示结果:

#!/bin/bash
grep -o -E '(whatever1|whatever2)' | wc -l

最新更新