我试过了:
grep -c "\|" *.*
但它不起作用,因为它给出了连续管道的错误计数.
我怎么能做到这一点?
您可以使用tr(1)
删除所有非管道字符,然后使用wc(1)
总计:
cat *.* | tr -d -c '|' | wc -c
这是违反直觉的,但在大多数unix正则表达式中,转义|
使其成为or-operator.所以你的线实际上匹配"什么都没有"(你可以通过在任何一方添加一些替代品来测试它).只是用
grep -c "|" *.*
其次,grep计算行数,而不是字符出现次数.你可以使用不同的工具; 或者,如果你坚持grep,你可以把每个"|" 在自己的路线上.例如,用sed:
sed 's/|/|\n/g' *.*
注意:如果使用sed,我建议进行大量测试,以确保它能够完成您的想法.那时我需要.
最后,结合成分:
cat *.* | sed 's/|/|\n/g' | grep -c "|"
不幸的是,这可能不适合你,因为你可能没有使用unix(因为*.*
).但希望它解释了这个问题,我总是觉得奇怪的是让人放心.