我正在编写一个bash脚本,它的输入可以通过管道给出,为此我使用"-";但是它可以使用一次。我试图用input=$(cat -)
将其保存在一个变量中,但我担心如果输入文件很大,可能会出现问题。我想知道使用输入的最佳方式-"给我。
脚本的想法是这样做:
#!/bin/bash
a=(cat - | grep -c "whatever")
b=(cat - | grep -c "whatever")
c=$(echo "($a+$b)" | bc)
echo "$c"
cat
读取其标准输入。所以"-";不需要。
如果你需要";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