我正在尝试从变量中获取匹配模式的计数来检查它的计数,但它只返回1作为结果,这是我正在尝试做的事情:
x="HELLO|THIS|IS|TEST"
echo $x | grep -c "|"
预期结果:3
实际结果:1
你知道为什么返回1而不是3?
感谢。
答案 0 :(得分:4)
grep -c
计算一行内不匹配的行。
您可以使用awk获取计数:
x="HELLO|THIS|IS|TEST"
echo "$x" | awk -F '|' '{print NF-1}'
3
另外,您可以使用tr
和wc
:
echo "$x" | tr -dc '|' | wc -c
3
答案 1 :(得分:0)
$ echo "$x" | grep -o '|' | grep -c .
3
grep -c
不计算匹配数。它计算匹配的行的数量。通过使用grep -o
,我们将匹配放在不同的行上。
这种方法适用于多行:
$ cat file
hello|this|is
a|test
$ grep -o '|' file | grep -c .
3
答案 2 :(得分:0)
grep
手册说:
grep,egrep,fgrep - 打印行匹配模式
和-c
标志:
而是为每个输入文件打印匹配行的计数
并且只有一个行匹配
答案 3 :(得分:0)
试试这个:
$ x="HELLO|THIS|IS|TEST"; echo -n "$x" | sed 's/[^|]//g' | wc -c
3
只有一个perl的管道:
echo "$x" |
perl -lne 'print scalar(() = /\|/g)'
答案 4 :(得分:0)
您不需要grep
。
pipe_only=${x//[^|]} # remove everything except | from the value of x
echo "${#pipe_only}" # output the length of pipe_only