如何在 bash 脚本中多次使用带“-”(破折号)的标准输入?

How to use more than once the stdin with a "-" (dash) in a bash script?

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

脚本的想法是做这样的事情:

#!/bin/bash
a=(cat - | grep -c "whatever")
b=(cat - | grep -c "whatever")
c=$(echo "($a+$b)" | bc)
echo "$c"

默认情况下,cat 读取其标准输入。所以不需要“-”。

如果您需要从输入中“grep”两个正则表达式,您可以使用不带 catgrep,因为默认情况下它也会读取其标准输入。

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

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

正如评论中指出的那样,如果要求还考虑到行中模式的多次出现以及同一行中的两种模式,grep 的“-o”选项可以被使用:

-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line

使用这样的选项,grep 的输出与匹配模式的行数一样多。因此,增强代码计算那些带有 wc -l 的行并显示结果:

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