我怎样才能找到一些管道('|')?

Lui*_*uis 2 grep

我试过了:

 grep -c "\|" *.* 
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为它给出了连续管道的错误计数.

我怎么能做到这一点?

Ada*_*eld 10

您可以使用tr(1)删除所有非管道字符,然后使用wc(1)总计:

cat *.* | tr -d -c '|' | wc -c
Run Code Online (Sandbox Code Playgroud)


13r*_*ren 6

这是违反直觉的,但在大多数unix正则表达式中,转义|使其成为or-operator.所以你的线实际上匹配"什么都没有"(你可以通过在任何一方添加一些替代品来测试它).只是用

grep -c "|" *.*
Run Code Online (Sandbox Code Playgroud)

其次,grep计算行数,而不是字符出现次数.你可以使用不同的工具; 或者,如果你坚持grep,你可以把每个"|" 在自己的路线上.例如,用sed:

sed 's/|/|\n/g' *.*
Run Code Online (Sandbox Code Playgroud)

注意:如果使用sed,我建议进行大量测试,以确保它能够完成您的想法.那时我需要.

最后,结合成分:

cat *.*  |  sed 's/|/|\n/g'  |  grep -c "|"
Run Code Online (Sandbox Code Playgroud)

不幸的是,这可能不适合你,因为你可能没有使用unix(因为*.*).但希望它解释了这个问题,我总是觉得奇怪的是让人放心.