使用 grep 计算模式实例数

使用 grep 计算模式实例数

我尝试/在某条路径中计数,但是grep当它位于一行时,将所有实例都计为 1。

/home/usr/bin/test | grep / -c 

给出了答案1

答案1

你的命令实际上会计算线包含/标准输出命令 /home/usr/bin/test

以下是一些用于/计算细绳 /home/usr/bin/test

grep -o '/' <<< "/home/usr/bin/test" | wc -l

tr -dc '/' <<< "/home/usr/bin/test" | wc -c

答案2

Asgrep -c统计包含该模式的行数。使用该-o选项将匹配的内容输出到不同的行。然后您可以使用-c来统计这些行数。

grep -o '/' <<< "/home/usr/bin/test" |  grep '/' -c

答案3

使用awk(分别打印每行):

awk -F"/" '{print NF-1}' my.txt
  • -F"/": 视为/字段分隔符
  • NF-1:字段数-1。

打印所有行:

tr -d '\n' < my.txt | awk -F"/" '{print NF-1}'

使用sedgrep

sed "s@/@/\n@g" my.txt | grep -c /
  • sed "s@/@/\n@g"每行后面都添加一行,/这样就grep可以对它们全部进行计数。

答案4

你做错了,因为:

  • -c标志计数匹配的行数
  • "/home/usr/bin/test | grep / -c字面意思是你试图执行/home/usr/bin/test文件并将其输出通过管道传输到grep

你应该做的是这样的:

  • 计算单个grep输出

    grep -o '/'  <<< "/home/usr/bin/test" | wc -l          
    
  • 使用除以下工具以外的工具grep

     # saving matches to array and printing array in scalar context
     $ perl -ne '@arr = $_ =~ /\//g;print 0+@arr' <<< "/home/usr/bin/test"                                                    
     4
    
     #  building list of only / chars and getting length of that list
     $ python -c 'import sys; print(len([char for line in sys.stdin for char in line if char == "/"]))' <<< "/home/usr/bin/test"
     4
    
     # iterating over each character of string using substr
     $ awk '{for(i=1;i<=length($0);i++) if(substr($0,i,1)=="/") count++}END{print count}' <<< "/home/usr/bin/test"            
     4
    

相关内容