2
A
回答
3
另一个选项,使用Perl,是:
perl -e 'while(<>){$c+=tr/|/|/};print "$c\n"' *
在非一个班轮格式是:
while(<>){
$c += tr/|/|/
}
print "$c\n"
的while(<>){
行是Perl的魔力来自于命令或STDIN
文件中读取行。你过一会儿就习惯了。该行本身进入一个名为$_
的变量,该变量是许多Perl命令的默认参数。例如tr
,其工作方式与tr(1)
相似,默认为在$_
上运行。我将我的结果放入一个名为$c
的全局变量中。 (在完整程序中,最好将其声明为循环外部的my $c = 0;
的词法变量。)+=
运算符将tr
命令的结果(此例中为管道字符数)与当前值$c
相加。
只要使用tr(1)
显然是一个更简单的选项。 ;-)
使用*.*
是DOSism,您不希望在类UNIX平台上使用DOSism。
使用单引号避免让shell解释管道字符的读取好一点。举例来说,我测试了我的答案是:
$ echo '||||
|||||' | perl -e 'while(<>){$c+=tr/|/|/};print "$c\n"'
9
-3
10
您可以使用tr(1)
删除所有非管道字符,然后用wc(1)
一共拿到:
cat *.* | tr -d -c '|' | wc -c
6
这是违反直觉的,但在大多数UNIX正则表达式,逃避|
使得它或运营商。所以你的线路实际上是匹配“什么也没有”(你可以通过在任何一边添加一些替代品来测试这一点)。只需使用
grep -c "|" *.*
其次,grep对行进行计数,而不是字符出现次数。你可以使用不同的工具;或者,如果你坚持grep,你可以把每个“|”在自己的路线上。例如,对于SED:
sed 's/|/|\n/g' *.*
注意:如果使用SED,我劝测试的很多以确保它做什么,你认为它。我需要那时。
最后,结合成份:
cat *.* | sed 's/|/|\n/g' | grep -c "|"
不幸的是,这可能不是为你工作,因为你很可能不使用UNIX(因为*.*
的)。但希望能解释这个问题,我总觉得这个问题令人奇怪地让人放心。
0
如果你想找到一些管道,然后
fgrep -o "|" | wc -l
如果你想找到一些与至少一个管道线,然后
fgrep -c "|"
相关问题
- 1. Git Grep =>为什么`git grep -h`不能用于Unix管道?
- 2. 我怎么能知道一个Perl的IO ::管
- 3. 什么是grep管道的输出
- 4. 我怎么能知道的信号
- 5. 我怎么能知道的AppDelegate
- 6. 我怎么能呼应詹金斯管道脚本版本号
- 7. PHP shell_exec不能使用grep和管道
- 8. 我怎么能知道我的数据适合内存
- 9. 我怎么能在剑道UI电网
- 10. 我怎么能知道一个PrintWriter
- 11. 我怎么能在剑道UI
- 12. 我怎么能知道在Linux上
- 13. 管道grep grep后保留着色
- 14. 我怎样才能得到grep管道通过tac返回值而不杀死php exec()函数中的进程?
- 15. 我怎么能排除grep的一些话会导致
- 16. Dmesg命令管道它grep
- 17. Vim内部(用管道)grep
- 18. 从grep和管道mkdir
- 19. 使用grep和管道
- 20. 我怎么用grep某些日志行
- 21. 我怎样才能阻止写入管道重新配置管道?
- 22. 我怎么能知道mongo数据未使用的空间
- 23. Linux:我怎么能grep文本从字符串到字符串
- 24. 为什么我不能(或者我怎么能)用管道保存brew医生的输出?
- 25. 我怎么能知道PowerShell的功能被忽略了
- 26. 性能瓶颈 - Linq到SQL或数据库 - 我怎么知道?
- 27. 我怎么能知道我的网站包含恶意代码
- 28. 管道AWK输出到grep的
- 29. 管道grep给太多的结果
- 30. 从grep管道的文件名到头
你真的想“* 。*“?这将排除名称中没有点的文件。 – 2009-03-05 13:12:17