我尝试/
在某条路径中计数,但是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}'
使用sed
和grep
:
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